Инвестиционный фонд «Shut Up and Take My Money» планируют открыть заведение общественного питания в Москве.
Цель исследования:
Анализируется датасет с заведениями общественного питания Москвы, составленный на основе данных сервисов Яндекс Карты и Яндекс Бизнес на лето 2022 года.
Структура moscow_places.csv:
• name — название заведения;
• address — адрес заведения;
• category — категория заведения, например «кафе», «пиццерия» или «кофейня»;
• hours — информация о днях и часах работы;
• lat — широта географической точки, в которой находится заведение;
• lng — долгота географической точки, в которой находится заведение;
• rating — рейтинг заведения по оценкам пользователей в Яндекс Картах (высшая оценка — 5.0);
• price — категория цен в заведении, например «средние», «ниже среднего», «выше среднего» и так далее;
• avg_bill — строка, которая хранит среднюю стоимость заказа в виде диапазона;
• middle_avg_bill — число с оценкой среднего чека, которое указано только для значений из столбца avg_bill, начинающихся с подстроки «Средний счёт»;
• middle_coffee_cup — число с оценкой одной чашки капучино, которое указано только для значений из столбца avg_bill, начинающихся с подстроки «Цена одной чашки капучино»;
• chain — число, выраженное 0 или 1, которое показывает, является ли заведение сетевым;
• district — административный район, в котором находится заведение, например Центральный административный округ;
• seats — количество посадочных мест.
</div>
Предварительный анализ рынка кофеен
!pip install geopandas
import pandas as pd
import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import seaborn as sns
import plotly.express as px
import plotly.graph_objs as go
import plotly.io as pio
import folium
from folium import Map, Marker, Choropleth
from folium.plugins import MarkerCluster
import geopandas
import requests
import json
import warnings
warnings.simplefilter('ignore')
Requirement already satisfied: geopandas in c:\programdata\anaconda3\lib\site-packages (0.13.2) Requirement already satisfied: fiona>=1.8.19 in c:\programdata\anaconda3\lib\site-packages (from geopandas) (1.9.4.post1) Requirement already satisfied: pandas>=1.1.0 in c:\programdata\anaconda3\lib\site-packages (from geopandas) (1.5.3) Requirement already satisfied: shapely>=1.7.1 in c:\programdata\anaconda3\lib\site-packages (from geopandas) (2.0.1) Requirement already satisfied: packaging in c:\programdata\anaconda3\lib\site-packages (from geopandas) (22.0) Requirement already satisfied: pyproj>=3.0.1 in c:\programdata\anaconda3\lib\site-packages (from geopandas) (3.6.0) Requirement already satisfied: certifi in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (2022.12.7) Requirement already satisfied: attrs>=19.2.0 in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (22.1.0) Requirement already satisfied: click-plugins>=1.0 in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (1.1.1) Requirement already satisfied: six in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (1.16.0) Requirement already satisfied: click~=8.0 in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (8.0.4) Requirement already satisfied: cligj>=0.5 in c:\programdata\anaconda3\lib\site-packages (from fiona>=1.8.19->geopandas) (0.7.2) Requirement already satisfied: numpy>=1.21.0 in c:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->geopandas) (1.23.5) Requirement already satisfied: pytz>=2020.1 in c:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->geopandas) (2022.7) Requirement already satisfied: python-dateutil>=2.8.1 in c:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->geopandas) (2.8.2) Requirement already satisfied: colorama in c:\programdata\anaconda3\lib\site-packages (from click~=8.0->fiona>=1.8.19->geopandas) (0.4.6)
try:
data=pd.read_csv('\\dataset\\moscow_places.csv')
except:
data=pd.read_csv('/datasets/moscow_places.csv')
data.head(5)
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | WoWфли | кафе | Москва, улица Дыбенко, 7/1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.878494 | 37.478860 | 5.0 | NaN | NaN | NaN | NaN | 0 | NaN |
| 1 | Четыре комнаты | ресторан | Москва, улица Дыбенко, 36, корп. 1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.875801 | 37.484479 | 4.5 | выше среднего | Средний счёт:1500–1600 ₽ | 1550.0 | NaN | 0 | 4.0 |
| 2 | Хазри | кафе | Москва, Клязьминская улица, 15 | Северный административный округ | пн-чт 11:00–02:00; пт,сб 11:00–05:00; вс 11:00... | 55.889146 | 37.525901 | 4.6 | средние | Средний счёт:от 1000 ₽ | 1000.0 | NaN | 0 | 45.0 |
| 3 | Dormouse Coffee Shop | кофейня | Москва, улица Маршала Федоренко, 12 | Северный административный округ | ежедневно, 09:00–22:00 | 55.881608 | 37.488860 | 5.0 | NaN | Цена чашки капучино:155–185 ₽ | NaN | 170.0 | 0 | NaN |
| 4 | Иль Марко | пиццерия | Москва, Правобережная улица, 1Б | Северный административный округ | ежедневно, 10:00–22:00 | 55.881166 | 37.449357 | 5.0 | средние | Средний счёт:400–600 ₽ | 500.0 | NaN | 1 | 148.0 |
data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 8406 entries, 0 to 8405 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 8406 non-null object 1 category 8406 non-null object 2 address 8406 non-null object 3 district 8406 non-null object 4 hours 7870 non-null object 5 lat 8406 non-null float64 6 lng 8406 non-null float64 7 rating 8406 non-null float64 8 price 3315 non-null object 9 avg_bill 3816 non-null object 10 middle_avg_bill 3149 non-null float64 11 middle_coffee_cup 535 non-null float64 12 chain 8406 non-null int64 13 seats 4795 non-null float64 dtypes: float64(6), int64(1), object(7) memory usage: 919.5+ KB
В датасете представлена информация о 8406 заведениях общественного питания в Москве.
Столбцы названы корректно. В столбцах с названием, категорией, адресом, округом, часами работы, координатами заведения, а также ценовой категорией с средним счетом представлены текстовые данные, признак сетевого заведения - целочисленные данные, прочие столбцы - вещественные числа. В некоторых столбцах имеются пропуски данных.
</div>
data_isna = data.isna().agg(['sum', 'mean'])
data_isna.loc['sum'] = data_isna.loc['sum'].round(0)
data_isna.loc['mean'] = (data_isna.loc['mean']*100).round(2)
data_isna
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sum | 0.0 | 0.0 | 0.0 | 0.0 | 536.00 | 0.0 | 0.0 | 0.0 | 5091.00 | 4590.0 | 5257.00 | 7871.00 | 0.0 | 3611.00 |
| mean | 0.0 | 0.0 | 0.0 | 0.0 | 6.38 | 0.0 | 0.0 | 0.0 | 60.56 | 54.6 | 62.54 | 93.64 | 0.0 | 42.96 |
Ценовая категория не указаны для 60.56% строк, количество мест отсутствуют в почти 43% строк. Небольшое количество даннных 6.37% потеряно в столбце с часами работы заведений. Остальные столбцы пропусков не содержат. Оставим датасет без изменений.
data.duplicated().sum()
0
data['address'].duplicated(False).sum()
4010
data[data.duplicated(['address'], False)==True].sort_values('address')
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1311 | Prime | ресторан | Москва, 1-й Волоколамский проезд, 10, стр. 1 | Северо-Западный административный округ | пн-пт 08:00–19:00 | 55.804294 | 37.490584 | 4.0 | низкие | Средний счёт:400–600 ₽ | 500.0 | NaN | 1 | 100.0 |
| 1260 | Жираф | кафе | Москва, 1-й Волоколамский проезд, 10, стр. 1 | Северо-Западный административный округ | пн-пт 08:00–20:00 | 55.804534 | 37.489640 | 4.3 | средние | Средний счёт:350–550 ₽ | 450.0 | NaN | 1 | 100.0 |
| 4298 | Catcher | кафе | Москва, 1-й Красногвардейский проезд, 19 | Центральный административный округ | ежедневно, 10:00–21:30 | 55.749773 | 37.535611 | 4.3 | NaN | NaN | NaN | NaN | 0 | NaN |
| 4215 | Crystal Cafe Made In Georgia | ресторан | Москва, 1-й Красногвардейский проезд, 19 | Центральный административный округ | ежедневно, 11:00–23:00 | 55.750715 | 37.536180 | 4.3 | высокие | Средний счёт:1500–3000 ₽ | 2250.0 | NaN | 0 | NaN |
| 4251 | Hudson Deli | кафе | Москва, 1-й Красногвардейский проезд, 21с2 | Центральный административный округ | пн-пт 08:00–20:00 | 55.749495 | 37.533647 | 4.2 | средние | Средний счёт:500–1000 ₽ | 750.0 | NaN | 0 | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 5531 | Burger Club | ресторан | Москва, шоссе Энтузиастов, 31 | Восточный административный округ | пн-пт 08:00–23:00; сб,вс 10:00–22:00 | 55.758614 | 37.751318 | 4.0 | NaN | Средний счёт:250–500 ₽ | 375.0 | NaN | 1 | 70.0 |
| 5462 | Пипони | пиццерия | Москва, шоссе Энтузиастов, 53 | Восточный административный округ | ежедневно, круглосуточно | 55.773148 | 37.824754 | 4.2 | низкие | Средний счёт:300 ₽ | 300.0 | NaN | 1 | 45.0 |
| 5579 | Пиццерия | пиццерия | Москва, шоссе Энтузиастов, 53 | Восточный административный округ | NaN | 55.773138 | 37.824711 | 4.2 | NaN | NaN | NaN | NaN | 0 | 45.0 |
| 5321 | Генацвале | ресторан | Москва, шоссе Энтузиастов, 66/1 | Восточный административный округ | ежедневно, 12:00–00:00 | 55.762989 | 37.777898 | 4.4 | выше среднего | Средний счёт:1000–1500 ₽ | 1250.0 | NaN | 1 | 98.0 |
| 5474 | Паста гриль | кафе | Москва, шоссе Энтузиастов, 66/1 | Восточный административный округ | NaN | 55.762947 | 37.778038 | 3.9 | NaN | NaN | NaN | NaN | 0 | 98.0 |
4010 rows × 14 columns
data.duplicated(['lat','lng'],False).sum()
66
data[data.duplicated(['lat','lng'],False)==True].sort_values('lat')
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7638 | Кофешефф | ресторан | Москва, Новоясеневский проспект, 7 | Юго-Западный административный округ | ежедневно, 08:30–21:00 | 55.607489 | 37.532367 | 4.3 | NaN | NaN | NaN | NaN | 0 | 60.0 |
| 7640 | Крошка Картошка | быстрое питание | Москва, Новоясеневский проспект, 7 | Юго-Западный административный округ | ежедневно, 10:00–22:00 | 55.607489 | 37.532367 | 4.1 | NaN | NaN | NaN | NaN | 1 | 60.0 |
| 7787 | Тануки | ресторан | Москва, Липецкая улица, 2, корп. 8 | Южный административный округ | ежедневно, 10:00–05:00 | 55.608307 | 37.664941 | 4.3 | выше среднего | Средний счёт:1000–1500 ₽ | 1250.0 | NaN | 1 | 120.0 |
| 7781 | Ёрш | пиццерия | Москва, Липецкая улица, 2, корп. 8 | Южный административный округ | ежедневно, 11:30–05:00 | 55.608307 | 37.664941 | 4.4 | выше среднего | Средний счёт:1000–1500 ₽ | 1250.0 | NaN | 1 | 120.0 |
| 7767 | За обе щёки | кафе | Москва, Варшавское шоссе, вл132/2 | Южный административный округ | ежедневно, 09:00–21:00 | 55.620316 | 37.608922 | 3.6 | NaN | NaN | NaN | NaN | 1 | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1071 | Кафе | быстрое питание | Москва, Анадырский проезд, 8, корп. 1 | Северо-Восточный административный округ | NaN | 55.863555 | 37.682835 | 3.7 | NaN | NaN | NaN | NaN | 0 | 100.0 |
| 273 | Pho Oanh | кафе | Москва, Староватутинский проезд, 14 | Северо-Восточный административный округ | ежедневно, 11:00–21:30 | 55.875804 | 37.665551 | 4.0 | NaN | NaN | NaN | NaN | 1 | 100.0 |
| 271 | Алали | быстрое питание | Москва, Староватутинский проезд, 14 | Северо-Восточный административный округ | ежедневно, 10:00–22:00 | 55.875804 | 37.665551 | 4.2 | NaN | NaN | NaN | NaN | 0 | 100.0 |
| 182 | Карелия | кафе | Москва, Карельский бульвар, 4А | Северный административный округ | ежедневно, 09:00–00:00 | 55.891936 | 37.536068 | 3.7 | NaN | NaN | NaN | NaN | 0 | NaN |
| 121 | Встреча | кафе | Москва, Карельский бульвар, 4А | Северный административный округ | ежедневно, круглосуточно | 55.891936 | 37.536068 | 4.1 | NaN | NaN | NaN | NaN | 1 | NaN |
66 rows × 14 columns
data['name'].duplicated().sum()
2792
data['name'].nunique()
5614
data['name'].sort_values().unique().tolist()
['#КешбэкКафе', '+39 Pizzeria Mozzarella bar', '1 Этаж', '1-я Креветочная', '10 Идеальных Пицц', '1001 Ночь', '100ловая', '100лоффка', '13', '13 Chef doner', '15 Kitchen+Bar', '15-й Шар', '16 Июня', '16 Тонн', '18 Грамм', '1901 Comfort Food Zone', '1у', '2 Типа', '2-й Этаж', '2046', '21 Век', '22 Акра Кофе&Хлеб', '2U-Ту-Ю', '3 Ступени', '351 Bar', '4 Сезона', '4.2. Bar', '4/1 Restaurant', '42 Coffee Shop', '47', '495', '4friends Coffee', '4tuna Cafe&Grill', '5 Stars Coffee', '55.709201, 37.392257', '6 Am Bread Kitchen', '6 Рукопожатий', '69 раков', '7 Сэндвичей', '7 элемент', '7/12', '8 Oz', '8 Вафель', '8 Зёрен', '8 Пончиков', '800°с Contemporary Steak', '8bit Pizza', '9 Bar Coffe', '9 Bar Coffee', '9 Зёрен', 'A-cafe', 'ABC Coffee Roasters', 'ABC coffee roasters', 'Acai Family', 'Accent', "Adam's Chicken", 'Adria Mare', 'Ahava', 'Air Coffee', 'Al Halal', 'Al33 Пиццерия бар Боттега', 'All Day', 'Alma', 'Alternative coffee', 'Aly’s Poke', 'Amande', 'Amarena', 'Americano Black Coffee & Food', 'Amg cafe', 'Ami Chaise', 'Amore Grande', 'Amsterdam Bar', 'Andy Coffee', 'Angel Cakes City', 'Angel Cakes Patriki', 'Ann Joy', 'Anri Bakery', 'Antalya', 'Anvil Cafe', 'Aq Kitchen', 'Aquarium', 'Arabix', 'Arch 1908', 'Archie', 'Arcus Bar And Food', 'Armibaker', 'Aroma', 'Art & Horses', 'Art Coffee Club', 'Art De Vie', 'Art-rco', 'Art-Буффет', 'Arzon', 'Arzon Food', 'Asia Gourmet', 'Asiatique Kitchen X Bar', 'Asparago', 'Assa', 'Atelier de Tartelettes', 'Atilla', 'Atlantica seafood', 'Autostory', 'AvKvadrate', 'Ava', 'Avenue 32', 'Avgust рыбный ресторан', 'Avocado Point', 'Avoday coffee and tea', 'B&b Bradu Bar', 'B&d Cafe', 'B. R. B. скоровернусь', 'B1 coffee&goodies', 'BB&Burgers', 'BBCafe', 'BBQ kitchen', 'BBQ kitchen 2.0', 'BBQ point', 'BFL’S', 'Ba Dinh', 'Baba Napoli', 'Babacha', 'Baci Abbracci', 'Baer Coffee', 'Bagetti', 'Bake&Coffee', 'Bakery', 'Bakery Mart', 'Balabowl', 'Balance', 'Balanceat', 'Baleno', 'Bali Lounge', 'Bando', 'Bao+Noodles', 'Bar Bq Cafe', 'Bar Park 15', 'Bar Zero Time', 'Barbacoa', 'Barmalini', 'Barra Cholo', 'BassG', 'Baza', 'Bb Grill', 'Bb grill', 'Beauty Pub', 'Beautyfood cafe', 'Beer & Brut', 'Beersenev Bar', 'Bellissima', 'Benedict', 'Berenj', 'Bericoni', 'Berry Fruit Vitamin & Fresh Bar', 'Berta', 'Bespoke Cafe', 'Between', 'Beyoglu Shef Doner Waffle', 'Beze Зиларт', 'Beze Ривер парк', 'Bfl’s', 'BierЛога', 'Big Black Cup coffee', 'Big City', "Big Jim's pub", 'BigСуши', 'Billy McDaniel', 'Bistro Ostro', 'Bitter Drop', 'Bizi', 'Bizone Lounge Итальянская кухня', 'Bklyn: Brooklyn Pizza Pie', 'Black & White lounge', 'Black Star Burger', 'Black Stone', 'Black Thai', 'Black молоко', 'Blanc', 'Blau', 'BliniCoffee', 'Blink Seafood', 'Blizz cafe&bar', 'Bloom Coffee', 'Bloom-n-Brew Baum', 'Bloom-n-Brew Factoria', 'Bloom-n-brew', 'Bluefin Sushi Nikkei & Seafood', 'Bm', 'Bo Food', 'Bo&Ga', 'Bo-bo Lounge', 'Bob’s your uncle', 'Bocconcino', 'Bodrero', 'Bodro coffee', 'Bollo', 'Bollywood', 'Bolognetta Osteria&Pizzeria', 'Bon Lavash', 'Bonjour', 'Bonne Cantine', 'Booblik', 'Bora Bora', 'Boss Doner', 'Boston seafood & bar', 'Botteganova Organic', 'Boulangerie', 'Bowl Family', 'BowlMe', 'Bowlroom', 'Bổ', 'Bradu bar', 'Brancho', 'Brasserie Lambic', 'Brasserie Stout', 'Bravos', 'Bread Head', 'Bread and Butter', 'Bread Пит', 'Breadville', 'Breakfast Cafe', 'Breakfast Hunters', 'Breakfast So Tasty', 'Brera', 'Brick', 'Bright Israeli Grill', 'Brisket BBQ', 'Brix', 'Bro Bar', 'Bro&n', 'Brodo bar & kitchen', 'Brooklyn Cafe', 'Brooklyn Coffee', 'Brooms', 'Bros Burritos', 'Brownie Mama', 'Brrrew!', 'Brunch cafe', 'Bruxx', 'Buba Mara', 'Buba by Sumosan', 'Bubbasheri', 'Buddy Bar', 'Bufet', 'Buffet', 'Bull meat', 'Bulldog Bar', 'Bulldog Coffee', 'Bunker Pub Beer', 'Buon', 'Burger Club', 'Burger Heroes', 'Burger Shaw', 'Burger club', 'Burgers and Crabs', 'But First Coffee', 'Bổ', "C'cups", 'CHICKO', 'CLean', 'Café Sicilia', 'Cafe', 'Cafe & Пельменная', 'Cafe 13', 'Cafe 55', 'Cafe Aprile', 'Cafe Imperial', 'Cafe Pantheon', 'Cafe Racer', 'Cafe Sunset', 'Cafe The Slim', 'Cafe Vecher', 'Cafe inn', 'Cafe&Bar', 'Cafe13', 'Cafeterius Simple', 'Caffa', 'Caffe Diemm', 'Caffe Galliano', "Caffe Mandy's", 'Caffeterria', 'Caffetteria', 'Cafio', 'Café 1892', 'Café Arizona', 'Café by Interoptika', 'Café de Paris', "Cake O'clock", 'Cake time', 'Calma!', 'Camera Obscura', 'Camorra Pizza e Birra', 'Campus', 'Canteen', 'Cantina City', 'Cantina city Free flow cafe', 'Cape', 'Capito', 'Capo Pizza & pasta', 'Captain Gyros', 'Cargo cafe', 'Carrots and Beans', 'Carrots and beans', 'Casa Del Caffe', 'Casa Leone', 'Casa di famiglia', 'Caspian', 'Cassette Cafe', 'Catch', 'Catcher', 'Cedro Albero', 'Cezve Coffee', 'Cha Cha', 'Chanh', 'Chat noir', 'Cheesemania', 'Chef Cat', 'Chef express', 'Chekhoff Cafe & Bar', 'Chicha San Chen', 'Chicken Father', 'Chicken Mania', 'Chicken Planet', 'Chiken King Shawarma', 'China Club', 'China Life', 'China Palace', 'Chindi Kitchen', 'Chinese market', 'Chips', "Chips'n'Kale", 'Chou Do', 'Chowder&Pie', 'Christian', 'Christopher. Co', 'Cinnabon', 'City Lunch', 'City Space Bar & Restaurant', 'City friends', 'City life', 'Clever Coffee', 'ClubPizza', 'Co/co coffee&cozy', 'Coba', 'Cobalt coffee', 'Cochonnet', 'Cof кофе', 'CofAir', 'Cofan', 'Cofe Fest', 'CofeFest', 'Coff Home', 'CoffeLab', 'Coffee', 'Coffee 42', 'Coffee Bay', 'Coffee Bean', 'Coffee Boy', 'Coffee Break', 'Coffee Brothers', 'Coffee Buro', 'Coffee Combo', 'Coffee Drop', 'Coffee FM', 'Coffee First', 'Coffee Frisbee', 'Coffee Garden', 'Coffee Gate', 'Coffee Guru', 'Coffee Inn', 'Coffee Itself', 'Coffee Joy', 'Coffee King', 'Coffee Like', 'Coffee Me', 'Coffee Miru', 'Coffee Moose', 'Coffee Music', 'Coffee Party', 'Coffee Place', 'Coffee Point', 'Coffee Pulse', 'Coffee Religion', 'Coffee Sova', 'Coffee Supreme', 'Coffee Vibe', 'Coffee Way', 'Coffee Week', 'Coffee and the City', 'Coffee bistro', 'Coffee in', 'Coffee point', 'Coffee to Go', 'Coffee Пирапора', 'Coffee&Croissant', 'Coffee13', "CoffeeBar'17", 'CoffeeFox', 'CoffeeShots', 'CoffeeWins', 'Coffee_Molka', 'Coffee_Spark', 'Coffeebara', 'Coffeebrain', 'Coffeehub', 'Coffeeist', 'Coffeeizm', "Coffeekaldi's", 'Coffeelovers', 'Coffeepie', 'Coffeeshop Company', 'Coffeesphere', 'Coffeeteabar', 'Coffeewinner', 'Coffeewood', 'CoffeeТУТ', 'Coffeplet', 'Coffezdes', 'Coffprice', 'Coffta', 'Cofix', 'Color Хот-дог', 'Colorcoffee', 'Come a casa', 'Comme A Paris', 'Community', 'Compass Coffee&Bakery', 'Conversation', "Cook'kareku", 'Corner Coffee Roasters', 'Corner cafe & kitchen', 'Corner cafe&kitchen', 'Correas', 'Corso Coffee', 'CosMos Lounge', 'Cosmic Coffee', 'Cosmic latte', 'Cotto', 'Country Coffee', "Cousin's Coffee", 'Craft Buffet', 'CraftBurgers', 'Crazy Fish', 'Crazy Noodle', 'Crazy kitch brothers', 'Cream Soda', 'Crema', 'Creperie de Paris', 'Crisper', 'Crop. coffee & smoothie bar', 'Crosseat', 'Crosta', 'Crystal Cafe Made In Georgia', 'Cubby', 'Cultura Coffee', 'Cup & Chin', 'Cups&Hugs', 'Curry', 'Cvc Китайская кухня', 'Cyber Saray', 'Cépage Kitchen & Bar', 'Dada', 'Daft Rabbit Pub', 'Dai Viet', 'Damil', 'Danell’o Pizza', "Dark Patrick's Pub", 'David B Cafe', 'Dcs', 'De Bassus', 'De Village', 'DeVino', 'Deep Fried Friends', 'Deli by Shell', 'Deli2Go', 'Deli2go', 'Delimarche', 'Dellos Corporate Service', 'DelonixCafe', 'Demi Coffee Shop', 'Demokrat', 'Dereza', 'Deti Lapshi', 'Di Villaggio', 'Di villaggio', 'DimSum & Co', 'DinnerTime', 'Dip With Me', 'Dirty Dance', 'District', 'Dizengof99', 'Do. Bro Coffee', 'Dobryakova Bakery', 'Dolce & Gamarjoba', 'Dolce Far Niente', 'Doner & tantuni', 'Doner 24', 'Doner One', 'Doner Pro', 'Doner mania', 'Donna Maria', 'Dopamine salad shop', 'Dormouse', 'Dormouse Coffee Shop', 'Double Axe', 'Double Duck', 'Dr. Coffee', 'Dr. Живаго', 'Dracoffeestar', 'Dragon Mixology Bar', 'Dragon bubble tea', 'Drama Cafe', 'Dream bar', 'Dream food', 'Drink Eat Travel', 'Drive', 'Drive Cafe', 'Drive Café', 'Dubai Meal', 'Duckit', 'Dudu', "Dunkin' Donuts", 'Dон Хулио', 'E. D. A.', 'E. S. Coffee', 'Eastoria', "Eastwood's", 'Easy Brix', 'Easy Food', 'Easy Pizza', 'Eat & Talk', 'Eat Market Алкон', 'Eat Street', 'Eat&Enjoy', 'Eat&Play', 'Eataly', 'Eateria Паста&Пицца', 'Ecle', 'Eco шаурма', 'Eda premium', 'Eggsellent', 'Ekspress Kafe', 'Ela', 'Element Coffee', 'Elephantkids', 'Eleven Coffee', 'Encore Cafe', 'Entree', 'Erwin РекаМореОкеан', 'Eshak', 'Eshka', 'Espressium', 'Espresso Bar', 'Espresso Patronum', 'Espresso bar', 'Espressoroom', 'EssThetik', 'Estetica', 'Estetica Cafe', 'Etmix', 'Eva', 'Everest Coffee', 'Ex: Libris', 'Express', 'Express кафе', 'Extra Virgin', 'Eywa Art', 'FLIP', 'Fabbrica. Pasta & Panini', 'Falafel Bro', 'Falko Pizza', 'Family Bakery', 'Family Cafe Mayak', 'Family Club', 'Family cafe', 'Family Ресто-Бар', 'Fan Cafe', 'Fan Zone', 'Farang', 'Farn House', 'Farro Pasta Bar', 'Farш', 'Fast Soup', 'Fast шашлык', 'Fastshashlik', 'Fayz', 'Feifan', 'Festa & Тесто', 'Festa&Тесто', 'Fibbee', 'Fibo Pasta & Ravioli', 'Fika', 'Financier', 'Finch', 'Fine coffee bar', 'Fire', 'Fire Burgers', 'Fire Lake', 'First&Only', 'Fish Bistro', 'Fish Культура', 'Fishbazaar', 'Fishman', 'Fishop', 'Fit Appėtit', 'Flaner', 'Flashburger', 'Flat White', 'Fleur', 'Flip', 'Floo', 'Florentini', 'Florentini City Cafe', 'Fluffy Fluffy', 'Fly Coffee', 'Foil', 'Food Embassy', 'Food Galaxy', 'Food Low Cost Sushi', 'Food Market Красная Роза', 'Food Story', 'Food Street. Рассвет', 'Food Way', 'FoodBand.ru', 'FoodKido', 'FoodMoscowCoffee', 'Foodpoint', 'Foodstep', 'Foody Foody', 'For You', 'For You coffee lab', 'For Your Kids', 'For by Friends', 'Forest Lounge', 'Fos', 'Fox', 'Foxler Art & Lounge', 'Frame wine & bar', 'Frank by Баста', 'Frankie Pizza', 'Free & Со', 'Free&co', 'Freedom bar', 'French Bakery', 'French Bakery SeDelice', 'Fresh', 'Fresh Coffee Bar', 'Fresh Food', 'Fresh cafe', 'Fresh for you', 'Fresh for you & Cofe', 'Fresh шаурма', 'Fresh-doner', 'Fresita Pizza', 'Freya', 'Friends', 'Friends & Family', 'Friends Forever', 'Friends Forever Botanica', 'Friends Social Club', 'From Berlin', 'Fruits and Veges', 'Fruitsberry', 'Fry’d', 'Fun ny Duck', 'Funky Lab', 'G&m', "G'астроном", 'G. Bakery8', "GRAB'n Go", 'Gabs&co', 'Gagawa', 'Garage', 'Garage Café', 'Garden Cafe', 'Garret', 'Garum', 'Gastro Room', 'Gastrobar', 'Gastrobistro Zola', "Gayane's", 'Gelati', 'Gem', 'Genso sushi', 'Gentle', 'Gentleman Coffee', 'Georgia Хинкали', 'Georgian Garden', 'Georgian House', 'Get and fly', 'Gimme Coffee', 'Ginger Cafe&FitnessBar', 'Glastonberry', 'Gloria Pizza', 'GlowSubs', 'Go Dragons', 'Go! Кофе', 'Gold', 'Gold 312', 'Golden coffee', 'Goncharov', 'GoodBro Kitchen', 'GoodFood', 'Gourmet Lunch', 'Grace Bistro', 'Grace pizza', 'Grand Cru', 'Grand Family', 'Grand-cafe', 'Grano', 'Grao De Cafe', 'Grape', 'Grape Wine & Kitchen', 'Grapefruit', 'Great Room Bar', 'Greek Street', 'Green Park Sokolniki', 'Green Pub', 'Green V. A. I.', 'GreenGo bar Зеленая лавка', 'Grey', 'Grill Bar Crafted', 'Grinvich Coffee Room', 'Gross Coffee', 'Gt. Coffee', 'Guests in the city', "Gump's", 'Guns & Bears', 'Gurmanoff', 'Guru', 'GustoLife', 'Gutai', 'Gvido gelato', 'GøG', 'Habit', 'Hagao', 'Halal', 'Halal food', 'Han Cook', 'Han cook', 'Hands Asian bistro', 'Hang Pho', 'Hanoi', 'Hanoi Food&Drinks', 'Happy Cup club', 'Harat’s pub', 'Hard Rock Cafe', 'Harvest Cocktail Bar', 'Hatimaki', 'Hayot', 'Heavy Еда', 'HellTower57', 'Hello Kitty', 'HelloPapaya', 'Hellopapaya', 'Help Driver', 'Hills', 'Hite', 'Ho Cho Pho', 'Ho Chu Pho', 'Holder Coffee', 'Holi Yoga & Cafe', 'Holy Berry', 'Home', 'Homies cafe', 'Hong Kong', 'Hop Gun Bar', 'Horendin', 'Hot Dog Bulldog', 'House Mafia', 'Howard Loves Craft', 'Hq! Coffee', 'Hudson Deli', 'Humpty Dumpty', 'I Coffee', 'I Do The Kitchen V. 2', 'I Like Wine', 'I Like Wine 2.0', 'I Love Cake', 'I Need Doner', 'I like wine', 'I-Coffee. me', 'I-Tal Corner', 'I-chef', 'I-chef бистро', 'I-cup', 'IL Pizzaiolo', 'IL pizzaiolo', 'IL Патио', 'IQ Coffee', 'IQ Кофе', 'ITeam Coffee', 'Ibis kitchen', 'Ice Embassy', 'Id Cafe', 'Ikigai', 'Il Barolo', 'Il Borgo', 'Il Forno', 'Il Letterato', 'Il Mio', 'Il Pittore', 'Il Tocco', 'Il Tomato', 'Illy', 'Impress', 'Introvert. place', 'Ipho Cafe', 'Ippo', 'Istanbul', 'Istanbul Kebab', 'Istanbul kebab', 'Istanbull house', "It's СоТ - Кофейня", "It's СоТ-Кофейня", 'Ivoire café', 'Izakaya', 'J&j Cafe Moscow', "J'pan", 'Ja-Jo', 'Jamamai asian kitchen & bar', 'Janis cafe', 'JapCake', 'Jaya', 'Jaz-Jiz', 'Jedi Coon', "Jeffrey's", "Jeffrey's Coffee", "Jeffrey's Coffeeshop", "Jeffrey's кофе и сидр", 'Jeffrey’s Coffeeshop', 'Jinju', 'Joe Pizza', "John Gilroy's Pub", 'Johnny Lee Pizza & Halal Food', 'Jolene', 'Joon', 'Julibon cafe', 'Jungle Brothers', 'Just', 'Just Coffee', 'K-Town', 'K-Town Korean BBQ', 'Kafin', 'Kaif Provenance', 'Kalabasa', 'Kano', 'Karavan', 'Karma Coffee', 'Kathrin’s bakery', 'Kavabanga-food', 'Kaya Coffee Shop', 'Kebab Time', 'Kebabs', 'Kenza', 'Khait Food', 'Kikidze', 'Killfish', 'Kimpab', 'KinoHome', 'Kiosk 11', 'Kiosk 1936', 'Kitchen', 'Kitchen For You', 'Kitsune', 'Kle_do cafe', 'Knockout coffee', 'Koi Nori', 'Koji', 'Kojiro', 'Kollektiv', 'Kool i cha', 'Korean Chick', 'Korean chick', 'Koreana Light', 'Kraskovka', 'Krispy Kreme', 'Ku: Рамен Изакая бар', 'Ku: рамен изакая бар', 'Kulinari', 'Kuma To Sakana', 'Kurkuma', 'Kurnik', 'Kuzina', 'Kuzu kebab', 'Kvartal', 'Kvartal Green Garden', 'L cafe', 'LISObon', 'La Bellezza', 'La Bulka', 'La Cafe', 'La Capitale', 'La Casa', 'La Maroush', 'La Mortazza', 'La Pausa', 'La Pizza Bomba', 'La Provincia', 'La Taverna', 'La Veranda', 'La Verona', 'La Vie Café', 'La villa', 'La Вилка', 'Lacabana-Africana', 'Laffa Laffa', 'Lalaland', 'Lamadjo', 'Lamm’s', 'Lancheria ArtPlay', 'Langet', 'Lao Lee Плешка', 'Larionov', 'Larry&Krabs', 'Lars Vegans', 'Laserland кафе', 'Latteria1963', 'Lav cafe', 'Lav шашлык', 'Lava Pizza', 'Lavanda', 'Lavash', 'Lavazza', 'Lavaш', 'Lavburger', 'Lawanda Store', 'Lay Bay', 'Layerz Bakery', 'Le Chaton Gris', 'Le Petit Paris', 'Le Procope Du Matin', 'Le Круассан', 'Leffe cafe', 'Lele Kitchen & Wine', 'LeoCoffee', 'Leon', 'Les', "Let's Rock", 'Levant/شام', 'Levin Bakehouse', 'Life Food', 'Lift Coffee & Grill', 'Like Cafe', 'Like burger&pizzetta', 'Lino', 'Lion', 'Little Panda Cafe', 'Littles Kids Play Cafe', 'Living Room', 'Lobby', 'Local', 'Local kitchen', 'Locals', 'Loft 45', 'Loft-cafe академия', 'Logovo', 'Lollo', 'Loo Chi', 'Lori Bar', 'Loro', 'LostBar', 'Louis Fusion', 'Lounge Bar', 'Love Lavash', 'Love&eat', 'Lovers', 'Lucky Bakery', 'Lucky Cheese Pizza', 'Lucky Eye', 'Lucky Eye. Ближневосточной lounge bar', 'Lucky Izakaya Bar', 'Lumicino', 'Lunch', 'Lunch Point', 'Lunch&Box', 'LunchCity', 'Lure Oysterbar', "Lusy's Pizza", 'Lutom', 'Lyanson’s coffee', 'MG Food', 'MYration', 'Ma Chere bistro', 'Mac & Cheese', 'Macadamia', 'Mad Season', 'Mad Wine Bar', 'Madam Yen', 'Madison Restaurant & Club', 'Maestrello', 'Mafe', 'Magaria', 'Magic Coffee', 'Main Food', 'MainFood', 'MamaMai', 'Mamma mia', 'Man Gal', 'Mandarin Combustible', 'Mangal House', ...]
duble = ['ABC Coffee Roasters', 'ABC coffee roasters', '9 Bar Coffe', '9 Bar Coffee', 'Caffeterria', 'Caffetteria',
'Drive Cafe', 'Drive Café', 'Free & Со', 'Free&co', "It's СоТ - Кофейня",
"It's СоТ-Кофейня",]
data.query('name in @duble').sort_values('name')
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 782 | 9 Bar Coffe | кофейня | Москва, Алтуфьевское шоссе, 43 | Северо-Восточный административный округ | пн-пт 07:30–18:00 | 55.870479 | 37.580795 | 4.4 | NaN | NaN | NaN | NaN | 0 | NaN |
| 45 | 9 Bar Coffee | кофейня | Москва, Коровинское шоссе, 41, стр. 1 | Северный административный округ | пн-пт 08:00–18:00 | 55.885837 | 37.513422 | 4.0 | NaN | NaN | NaN | NaN | 1 | 46.0 |
| 5572 | 9 Bar Coffee | кофейня | Москва, Боровая улица, 7, стр. 2 | Юго-Восточный административный округ | пн-пт 08:00–18:30 | 55.771149 | 37.714980 | 4.1 | NaN | NaN | NaN | NaN | 1 | 10.0 |
| 5450 | 9 Bar Coffee | кофейня | Москва, Боровая улица, 10к1 | Юго-Восточный административный округ | ежедневно, 08:00–22:00 | 55.771561 | 37.713906 | 4.6 | NaN | NaN | NaN | NaN | 1 | NaN |
| 5181 | 9 Bar Coffee | кофейня | Москва, Космодамианская набережная, 52с1 | Центральный административный округ | пн-пт 08:00–20:00 | 55.732185 | 37.646987 | 4.2 | NaN | NaN | NaN | NaN | 1 | NaN |
| 2323 | 9 Bar Coffee | кофейня | Москва, Стромынский переулок, 4 | Восточный административный округ | пн-пт 08:00–20:00; сб,вс 08:00–18:00 | 55.793241 | 37.694106 | 4.3 | NaN | Цена чашки капучино:130–230 ₽ | NaN | 180.0 | 1 | 0.0 |
| 4013 | 9 Bar Coffee | кофейня | Москва, Бережковская набережная, 16А | Западный административный округ | пн-пт 09:00–19:00 | 55.737824 | 37.562717 | 4.4 | NaN | Цена чашки капучино:115–140 ₽ | NaN | 127.0 | 1 | NaN |
| 1446 | 9 Bar Coffee | кофейня | Москва, Ленинградский проспект, 80, корп. 1 | Северный административный округ | пн-пт 07:30–21:00; сб,вс 07:30–19:00 | 55.810352 | 37.506625 | 4.3 | NaN | Цена чашки капучино:60–150 ₽ | NaN | 105.0 | 1 | 625.0 |
| 4696 | ABC Coffee Roasters | кофейня | Москва, улица Покровка, 7/9-11к1, подъезд 10 | Центральный административный округ | пн-пт 08:00–22:00; сб,вс 10:00–22:00 | 55.759012 | 37.642190 | 4.4 | NaN | NaN | NaN | NaN | 1 | NaN |
| 4163 | ABC Coffee Roasters | кофейня | Москва, Усачёва улица, 11И | Центральный административный округ | пн-пт 08:00–22:00; сб,вс 10:00–22:00 | 55.727530 | 37.570567 | 4.4 | NaN | NaN | NaN | NaN | 1 | NaN |
| 3813 | ABC Coffee Roasters | кофейня | Москва, Большая Никитская улица, 19/16с1 | Центральный административный округ | пн-пт 08:00–22:00; сб,вс 10:00–22:00 | 55.757162 | 37.600701 | 4.4 | NaN | NaN | NaN | NaN | 1 | NaN |
| 5156 | ABC Coffee Roasters | кофейня | Москва, Ордынский тупик, 4А | Центральный административный округ | пн-пт 08:00–22:00; сб,вс 10:00–22:00 | 55.741026 | 37.623384 | 4.5 | NaN | NaN | NaN | NaN | 1 | NaN |
| 1442 | ABC coffee roasters | кофейня | Москва, Ленинградский проспект, 72, корп. 1 | Северный административный округ | пн-пт 08:00–22:00; сб,вс 10:00–22:00 | 55.805547 | 37.520395 | 4.5 | средние | Цена чашки капучино:220–270 ₽ | NaN | 245.0 | 0 | 625.0 |
| 7035 | Caffeterria | кофейня | Москва, улица Бутлерова, 17 | Юго-Западный административный округ | NaN | 55.650150 | 37.539626 | 4.7 | NaN | NaN | NaN | NaN | 0 | 60.0 |
| 4145 | Caffetteria | кафе | Москва, Киевская улица, 2, стр. 5 | Западный административный округ | ежедневно, 09:00–21:00 | 55.743481 | 37.563312 | 3.9 | средние | Средний счёт:300–1000 ₽ | 650.0 | NaN | 0 | NaN |
| 1254 | Drive Cafe | кафе | Москва, Северо-Западный административный округ... | Северо-Западный административный округ | NaN | 55.792090 | 37.391216 | 3.7 | NaN | NaN | NaN | NaN | 0 | NaN |
| 6438 | Drive Café | кафе | Москва, Ставропольская улица, 31 | Юго-Восточный административный округ | ежедневно, круглосуточно | 55.682254 | 37.773623 | 3.3 | NaN | NaN | NaN | NaN | 1 | NaN |
| 6927 | Drive Café | кафе | Москва, Севастопольский проспект, 89 | Юго-Западный административный округ | ежедневно, круглосуточно | 55.644736 | 37.560829 | 4.2 | NaN | NaN | NaN | NaN | 1 | NaN |
| 6717 | Drive Café | кафе | Москва, МКАД, 43-й километр, вл12Бс1 | Юго-Западный административный округ | ежедневно, круглосуточно | 55.632211 | 37.468479 | 4.1 | NaN | NaN | NaN | NaN | 1 | NaN |
| 6798 | Drive Café | кафе | Москва, МКАД, 46-й километр, вл6 | Западный административный округ | ежедневно, круглосуточно | 55.654813 | 37.441619 | 3.5 | NaN | NaN | NaN | NaN | 1 | NaN |
| 6197 | Drive Café | кафе | Москва, улица Дмитрия Ульянова, 9А, стр. 1 | Юго-Западный административный округ | ежедневно, круглосуточно | 55.690816 | 37.565954 | 3.8 | NaN | NaN | NaN | NaN | 1 | 90.0 |
| 6987 | Drive Café | кафе | Москва, улица Обручева, 42А | Юго-Западный административный округ | ежедневно, круглосуточно | 55.651971 | 37.546844 | 4.0 | NaN | NaN | NaN | NaN | 1 | NaN |
| 7170 | Drive Café | кафе | Москва, Каширское шоссе, 57А | Южный административный округ | ежедневно, круглосуточно | 55.634298 | 37.701279 | 4.2 | NaN | NaN | NaN | NaN | 1 | 17.0 |
| 7213 | Drive Café | кафе | Москва, Каширское шоссе, вл80А | Южный административный округ | ежедневно, круглосуточно | 55.632770 | 37.701665 | 4.1 | NaN | NaN | NaN | NaN | 1 | NaN |
| 7482 | Drive Café | кафе | Москва, МКАД, 16-й километр, вл4 | Юго-Восточный административный округ | ежедневно, круглосуточно | 55.644450 | 37.821370 | 3.9 | NaN | NaN | NaN | NaN | 1 | NaN |
| 7684 | Drive Café | кафе | Москва, МКАД, 34-й километр, вл7с1 | Юго-Западный административный округ | ежедневно, круглосуточно | 55.580332 | 37.572903 | 4.0 | NaN | NaN | NaN | NaN | 1 | NaN |
| 7845 | Drive Café | кафе | Москва, Шипиловский проезд, 29 | Южный административный округ | ежедневно, круглосуточно | 55.616369 | 37.695107 | 3.8 | NaN | NaN | NaN | NaN | 1 | 5.0 |
| 6577 | Drive Café | кафе | Москва, проспект Вернадского, 100А | Западный административный округ | ежедневно, круглосуточно | 55.651096 | 37.478337 | 3.9 | NaN | NaN | NaN | NaN | 1 | NaN |
| 5793 | Drive Café | кафе | Москва, улица Лобачевского, 21 | Западный административный округ | ежедневно, круглосуточно | 55.677730 | 37.481469 | 4.0 | NaN | NaN | NaN | NaN | 1 | NaN |
| 24 | Drive Café | кафе | Москва, улица Дыбенко, 9Ас1 | Северный административный округ | ежедневно, круглосуточно | 55.879992 | 37.481571 | 4.0 | NaN | NaN | NaN | NaN | 1 | NaN |
| 5760 | Drive Café | кафе | Москва, улица Лобачевского, 92Г | Западный административный округ | ежедневно, круглосуточно | 55.678526 | 37.484376 | 4.2 | NaN | NaN | NaN | NaN | 1 | NaN |
| 7943 | Drive Café | кафе | Москва, МКАД, 19-й километр, 8 | Южный административный округ | ежедневно, круглосуточно | 55.619078 | 37.781873 | 4.1 | NaN | NaN | NaN | NaN | 1 | NaN |
| 3273 | Drive Café | кафе | Москва, Кутузовский проспект, 55, стр. 2 | Западный административный округ | ежедневно, круглосуточно | 55.729875 | 37.484326 | 4.2 | NaN | NaN | NaN | NaN | 1 | 100.0 |
| 3234 | Drive Café | кафе | Москва, улица Барклая, 1Ж | Западный административный округ | ежедневно, круглосуточно | 55.736871 | 37.511861 | 4.2 | NaN | NaN | NaN | NaN | 1 | 6.0 |
| 3229 | Drive Café | кафе | Москва, Кутузовский проспект, 52 | Западный административный округ | ежедневно, круглосуточно | 55.730866 | 37.483566 | 4.3 | NaN | NaN | NaN | NaN | 1 | NaN |
| 2492 | Drive Café | кафе | Москва, Гаврикова улица, 4ст1 | Центральный административный округ | ежедневно, круглосуточно | 55.779490 | 37.671880 | 3.9 | NaN | NaN | NaN | NaN | 1 | NaN |
| 457 | Drive Café | кафе | Москва, Фестивальная улица, 6А, стр. 1 | Северный административный округ | ежедневно, круглосуточно | 55.858064 | 37.487468 | 4.2 | NaN | NaN | NaN | NaN | 1 | 100.0 |
| 451 | Drive Café | кафе | Москва, улица Свободы, 70 | Северо-Западный административный округ | ежедневно, круглосуточно | 55.872268 | 37.440776 | 4.3 | NaN | NaN | NaN | NaN | 1 | NaN |
| 384 | Drive Café | кафе | Москва, Беломорская улица, 2А, стр. 1 | Северный административный округ | ежедневно, круглосуточно | 55.862203 | 37.466740 | 4.2 | NaN | NaN | NaN | NaN | 1 | NaN |
| 5768 | Drive Café | кафе | Москва, Минская улица, 1Н | Западный административный округ | ежедневно, круглосуточно | 55.726321 | 37.494762 | 4.2 | NaN | NaN | NaN | NaN | 1 | NaN |
| 3285 | Free & Со | пиццерия | Москва, Багратионовский проезд, 1А, корп. 1 | Западный административный округ | ежедневно, 10:00–23:00 | 55.745802 | 37.513116 | 4.3 | средние | Средний счёт:до 470 ₽ | 470.0 | NaN | 0 | 40.0 |
| 6799 | Free&co | пиццерия | Москва, Профсоюзная улица, 109, корп. 2 | Юго-Западный административный округ | ежедневно, 10:00–22:00 | 55.632829 | 37.519910 | 4.1 | NaN | NaN | NaN | NaN | 1 | 170.0 |
| 1151 | Free&co | пиццерия | Москва, проезд Дежнёва, 23 | Северо-Восточный административный округ | ежедневно, 10:00–22:00 | 55.869924 | 37.636841 | 3.9 | средние | Средний счёт:до 470 ₽ | 470.0 | NaN | 1 | 20.0 |
| 7966 | Free&co | быстрое питание | Москва, Воронежская улица, 44 | Южный административный округ | ежедневно, 10:00–22:00 | 55.610158 | 37.747936 | 1.9 | средние | Средний счёт:до 470 ₽ | 470.0 | NaN | 1 | NaN |
| 1898 | It's СоТ - Кофейня | кофейня | Москва, Бумажный проезд, 14, стр. 1 | Северный административный округ | пн-пт 08:00–19:00 | 55.791338 | 37.587309 | 4.4 | средние | Цена чашки капучино:90–240 ₽ | NaN | 165.0 | 0 | NaN |
| 1913 | It's СоТ-Кофейня | кофейня | Москва, 1-я улица Ямского Поля, 17к12 | Северный административный округ | пн-пт 08:00–19:00 | 55.783833 | 37.584821 | 4.4 | NaN | NaN | NaN | NaN | 0 | NaN |
data['name']=data['name'].str.lower()
data['name']=data['name'].str.replace(' ','')
data['name']=data['name'].str.replace('é','e')
data['name']=data['name'].str.replace('9barcoffe', '9barcoffee')
data['name']=data['name'].str.replace('9barcoffeee', '9barcoffee')
# Проверим изменения в наименованиях заведений общественного питания и нa наличие неявных дубликатов:
data['name'].sort_values().unique().tolist()
['#кешбэккафе', '+39pizzeriamozzarellabar', '1-якреветочная', '1001ночь', '100ловая', '100лоффка', '10идеальныхпицц', '13', '13chefdoner', '15-йшар', '15kitchen+bar', '16июня', '16тонн', '18грамм', '1901comfortfoodzone', '1у', '1этаж', '2-йэтаж', '2046', '21век', '22акракофе&хлеб', '2u-ту-ю', '2типа', '351bar', '3ступени', '4.2.bar', '4/1restaurant', '42coffeeshop', '47', '495', '4friendscoffee', '4tunacafe&grill', '4сезона', '55.709201,37.392257', '5starscoffee', '69раков', '6ambreadkitchen', '6рукопожатий', '7/12', '7сэндвичей', '7элемент', '800°сcontemporarysteak', '8bitpizza', '8oz', '8вафель', '8зёрен', '8пончиков', '9barcoffee', '9зёрен', 'a-cafe', 'abccoffeeroasters', 'acaifamily', 'accent', "adam'schicken", 'adriamare', 'ahava', 'aircoffee', 'al33пиццериябарботтега', 'alhalal', 'allday', 'alma', 'alternativecoffee', 'aly’spoke', 'amande', 'amarena', 'americanoblackcoffee&food', 'amgcafe', 'amichaise', 'amoregrande', 'amsterdambar', 'andycoffee', 'angelcakescity', 'angelcakespatriki', 'annjoy', 'anribakery', 'antalya', 'anvilcafe', 'aqkitchen', 'aquarium', 'arabix', 'arch1908', 'archie', 'arcusbarandfood', 'armibaker', 'aroma', 'art&horses', 'art-rco', 'art-буффет', 'artcoffeeclub', 'artdevie', 'arzon', 'arzonfood', 'asiagourmet', 'asiatiquekitchenxbar', 'asparago', 'assa', 'atelierdetartelettes', 'atilla', 'atlanticaseafood', 'autostory', 'ava', 'avenue32', 'avgustрыбныйресторан', 'avkvadrate', 'avocadopoint', 'avodaycoffeeandtea', 'b&bbradubar', 'b&dcafe', 'b.r.b.скоровернусь', 'b1coffee&goodies', 'babacha', 'babanapoli', 'baciabbracci', 'badinh', 'baercoffee', 'bagetti', 'bake&coffee', 'bakery', 'bakerymart', 'balabowl', 'balance', 'balanceat', 'baleno', 'balilounge', 'bando', 'bao+noodles', 'barbacoa', 'barbqcafe', 'barmalini', 'barpark15', 'barracholo', 'barzerotime', 'bassg', 'baza', 'bb&burgers', 'bbcafe', 'bbgrill', 'bbqkitchen', 'bbqkitchen2.0', 'bbqpoint', 'beautyfoodcafe', 'beautypub', 'beer&brut', 'beersenevbar', 'bellissima', 'benedict', 'berenj', 'bericoni', 'berryfruitvitamin&freshbar', 'berta', 'bespokecafe', 'between', 'beyoglushefdonerwaffle', 'bezeзиларт', 'bezeриверпарк', 'bfl’s', 'bierлога', 'bigblackcupcoffee', 'bigcity', "bigjim'spub", 'bigсуши', 'billymcdaniel', 'bistroostro', 'bitterdrop', 'bizi', 'bizoneloungeитальянскаякухня', 'bklyn:brooklynpizzapie', 'black&whitelounge', 'blackstarburger', 'blackstone', 'blackthai', 'blackмолоко', 'blanc', 'blau', 'blinicoffee', 'blinkseafood', 'blizzcafe&bar', 'bloom-n-brew', 'bloom-n-brewbaum', 'bloom-n-brewfactoria', 'bloomcoffee', 'bluefinsushinikkei&seafood', 'bm', 'bo&ga', 'bo-bolounge', 'bob’syouruncle', 'bocconcino', 'bodrero', 'bodrocoffee', 'bofood', 'bollo', 'bollywood', 'bolognettaosteria&pizzeria', 'bonjour', 'bonlavash', 'bonnecantine', 'booblik', 'borabora', 'bossdoner', 'bostonseafood&bar', 'botteganovaorganic', 'boulangerie', 'bowlfamily', 'bowlme', 'bowlroom', 'bổ', 'bradubar', 'brancho', 'brasserielambic', 'brasseriestout', 'bravos', 'breadandbutter', 'breadhead', 'breadville', 'breadпит', 'breakfastcafe', 'breakfasthunters', 'breakfastsotasty', 'brera', 'brick', 'brightisraeligrill', 'brisketbbq', 'brix', 'bro&n', 'brobar', 'brodobar&kitchen', 'brooklyncafe', 'brooklyncoffee', 'brooms', 'brosburritos', 'browniemama', 'brrrew!', 'brunchcafe', 'bruxx', 'bubabysumosan', 'bubamara', 'bubbasheri', 'buddybar', 'bufet', 'buffet', 'bulldogbar', 'bulldogcoffee', 'bullmeat', 'bunkerpubbeer', 'buon', 'burgerclub', 'burgerheroes', 'burgersandcrabs', 'burgershaw', 'butfirstcoffee', 'bổ', "c'cups", 'cafésicilia', 'cafe', 'cafe&bar', 'cafe&пельменная', 'cafe13', 'cafe1892', 'cafe55', 'cafeaprile', 'cafearizona', 'cafebyinteroptika', 'cafedeparis', 'cafeimperial', 'cafeinn', 'cafepantheon', 'caferacer', 'cafesunset', 'cafeteriussimple', 'cafetheslim', 'cafevecher', 'caffa', 'caffediemm', 'caffegalliano', "caffemandy's", 'caffeterria', 'caffetteria', 'cafio', "cakeo'clock", 'caketime', 'calma!', 'cameraobscura', 'camorrapizzaebirra', 'campus', 'canteen', 'cantinacity', 'cantinacityfreeflowcafe', 'cape', 'capito', 'capopizza&pasta', 'captaingyros', 'cargocafe', 'carrotsandbeans', 'casadelcaffe', 'casadifamiglia', 'casaleone', 'caspian', 'cassettecafe', 'catch', 'catcher', 'cedroalbero', 'cepagekitchen&bar', 'cezvecoffee', 'chacha', 'chanh', 'chatnoir', 'cheesemania', 'chefcat', 'chefexpress', 'chekhoffcafe&bar', 'chichasanchen', 'chickenfather', 'chickenmania', 'chickenplanet', 'chicko', 'chikenkingshawarma', 'chinaclub', 'chinalife', 'chinapalace', 'chindikitchen', 'chinesemarket', 'chips', "chips'n'kale", 'choudo', 'chowder&pie', 'christian', 'christopher.co', 'cinnabon', 'cityfriends', 'citylife', 'citylunch', 'cityspacebar&restaurant', 'clean', 'clevercoffee', 'clubpizza', 'co/cocoffee&cozy', 'coba', 'cobaltcoffee', 'cochonnet', 'cofair', 'cofan', 'cofefest', 'coffee', 'coffee&croissant', 'coffee13', 'coffee42', 'coffee_molka', 'coffee_spark', 'coffeeandthecity', "coffeebar'17", 'coffeebara', 'coffeebay', 'coffeebean', 'coffeebistro', 'coffeeboy', 'coffeebrain', 'coffeebreak', 'coffeebrothers', 'coffeeburo', 'coffeecombo', 'coffeedrop', 'coffeefirst', 'coffeefm', 'coffeefox', 'coffeefrisbee', 'coffeegarden', 'coffeegate', 'coffeeguru', 'coffeehub', 'coffeein', 'coffeeinn', 'coffeeist', 'coffeeitself', 'coffeeizm', 'coffeejoy', "coffeekaldi's", 'coffeeking', 'coffeelike', 'coffeelovers', 'coffeeme', 'coffeemiru', 'coffeemoose', 'coffeemusic', 'coffeeparty', 'coffeepie', 'coffeeplace', 'coffeepoint', 'coffeepulse', 'coffeereligion', 'coffeeshopcompany', 'coffeeshots', 'coffeesova', 'coffeesphere', 'coffeesupreme', 'coffeeteabar', 'coffeetogo', 'coffeevibe', 'coffeeway', 'coffeeweek', 'coffeewinner', 'coffeewins', 'coffeewood', 'coffeeпирапора', 'coffeeтут', 'coffelab', 'coffeplet', 'coffezdes', 'coffhome', 'coffprice', 'coffta', 'cofix', 'cofкофе', 'colorcoffee', 'colorхот-дог', 'comeacasa', 'commeaparis', 'community', 'compasscoffee&bakery', 'conversation', "cook'kareku", 'cornercafe&kitchen', 'cornercoffeeroasters', 'correas', 'corsocoffee', 'cosmiccoffee', 'cosmiclatte', 'cosmoslounge', 'cotto', 'countrycoffee', "cousin'scoffee", 'craftbuffet', 'craftburgers', 'crazyfish', 'crazykitchbrothers', 'crazynoodle', 'creamsoda', 'crema', 'creperiedeparis', 'crisper', 'crop.coffee&smoothiebar', 'crosseat', 'crosta', 'crystalcafemadeingeorgia', 'cubby', 'culturacoffee', 'cup&chin', 'cups&hugs', 'curry', 'cvcкитайскаякухня', 'cybersaray', 'dada', 'daftrabbitpub', 'daiviet', 'damil', 'danell’opizza', "darkpatrick'spub", 'davidbcafe', 'dcs', 'debassus', 'deepfriedfriends', 'deli2go', 'delibyshell', 'delimarche', 'delloscorporateservice', 'delonixcafe', 'demicoffeeshop', 'demokrat', 'dereza', 'detilapshi', 'devillage', 'devino', 'dimsum&co', 'dinnertime', 'dipwithme', 'dirtydance', 'district', 'divillaggio', 'dizengof99', 'do.brocoffee', 'dobryakovabakery', 'dolce&gamarjoba', 'dolcefarniente', 'doner&tantuni', 'doner24', 'donermania', 'donerone', 'donerpro', 'donnamaria', 'dopaminesaladshop', 'dormouse', 'dormousecoffeeshop', 'doubleaxe', 'doubleduck', 'dr.coffee', 'dr.живаго', 'dracoffeestar', 'dragonbubbletea', 'dragonmixologybar', 'dramacafe', 'dreambar', 'dreamfood', 'drinkeattravel', 'drive', 'drivecafe', 'dubaimeal', 'duckit', 'dudu', "dunkin'donuts", 'dонхулио', 'e.d.a.', 'e.s.coffee', 'eastoria', "eastwood's", 'easybrix', 'easyfood', 'easypizza', 'eat&enjoy', 'eat&play', 'eat&talk', 'eataly', 'eateriaпаста&пицца', 'eatmarketалкон', 'eatstreet', 'ecle', 'ecoшаурма', 'edapremium', 'eggsellent', 'ekspresskafe', 'ela', 'elementcoffee', 'elephantkids', 'elevencoffee', 'encorecafe', 'entree', 'erwinрекамореокеан', 'eshak', 'eshka', 'espressium', 'espressobar', 'espressopatronum', 'espressoroom', 'essthetik', 'estetica', 'esteticacafe', 'etmix', 'etudescafe', 'eva', 'everestcoffee', 'ex:libris', 'express', 'expressкафе', 'extravirgin', 'eywaart', 'fabbrica.pasta&panini', 'falafelbro', 'falkopizza', 'familybakery', 'familycafe', 'familycafemayak', 'familyclub', 'familyресто-бар', 'fancafe', 'fanzone', 'farang', 'farnhouse', 'farropastabar', 'farш', 'fastshashlik', 'fastsoup', 'fastшашлык', 'fayz', 'feifan', 'festa&тесто', 'fibbee', 'fibopasta&ravioli', 'fika', 'financier', 'finch', 'finecoffeebar', 'fire', 'fireburgers', 'firelake', 'first&only', 'fishbazaar', 'fishbistro', 'fishman', 'fishop', 'fishкультура', 'fitappėtit', 'flaner', 'flashburger', 'flatwhite', 'fleur', 'flip', 'floo', 'florentini', 'florentinicitycafe', 'fluffyfluffy', 'flycoffee', 'foil', 'foodband.ru', 'foodembassy', 'foodgalaxy', 'foodkido', 'foodlowcostsushi', 'foodmarketкраснаяроза', 'foodmoscowcoffee', 'foodpoint', 'foodstep', 'foodstory', 'foodstreet.рассвет', 'foodway', 'foodyfoody', 'forbyfriends', 'forestlounge', 'foryou', 'foryoucoffeelab', 'foryourkids', 'fos', 'fox', 'foxlerart&lounge', 'framewine&bar', 'frankbyбаста', 'frankiepizza', 'free&co', 'free&со', 'freedombar', 'frenchbakery', 'frenchbakerysedelice', 'fresh', 'fresh-doner', 'freshcafe', 'freshcoffeebar', 'freshfood', 'freshforyou', 'freshforyou&cofe', 'freshшаурма', 'fresitapizza', 'freya', 'friends', 'friends&family', 'friendsforever', 'friendsforeverbotanica', 'friendssocialclub', 'fromberlin', 'fruitsandveges', 'fruitsberry', 'fry’d', 'funkylab', 'funnyduck', 'g&m', "g'астроном", 'g.bakery8', 'gabs&co', 'gagawa', 'garage', 'garagecafe', 'gardencafe', 'garret', 'garum', 'gastrobar', 'gastrobistrozola', 'gastroroom', "gayane's", 'gelati', 'gem', 'gensosushi', 'gentle', 'gentlemancoffee', 'georgiangarden', 'georgianhouse', 'georgiaхинкали', 'getandfly', 'gimmecoffee', 'gingercafe&fitnessbar', 'glastonberry', 'gloriapizza', 'glowsubs', 'go!кофе', 'godragons', 'gold', 'gold312', 'goldencoffee', 'goncharov', 'goodbrokitchen', 'goodfood', 'gourmetlunch', "grab'ngo", 'gracebistro', 'gracepizza', 'grand-cafe', 'grandcru', 'grandfamily', 'grano', 'graodecafe', 'grape', 'grapefruit', 'grapewine&kitchen', 'greatroombar', 'greekstreet', 'greengobarзеленаялавка', 'greenparksokolniki', 'greenpub', 'greenv.a.i.', 'grey', 'grillbarcrafted', 'grinvichcoffeeroom', 'grosscoffee', 'gt.coffee', 'guestsinthecity', "gump's", 'guns&bears', 'gurmanoff', 'guru', 'gustolife', 'gutai', 'gvidogelato', 'gøg', 'habit', 'hagao', 'halal', 'halalfood', 'hancook', 'handsasianbistro', 'hangpho', 'hanoi', 'hanoifood&drinks', 'happycupclub', 'harat’spub', 'hardrockcafe', 'harvestcocktailbar', 'hatimaki', 'hayot', 'heavyеда', 'hellokitty', 'hellopapaya', 'helltower57', 'helpdriver', 'hills', 'hite', 'hochopho', 'hochupho', 'holdercoffee', 'holiyoga&cafe', 'holyberry', 'home', 'homiescafe', 'hongkong', 'hopgunbar', 'horendin', 'hotdogbulldog', 'housemafia', 'howardlovescraft', 'hq!coffee', 'hudsondeli', 'humptydumpty', 'i-chef', 'i-chefбистро', 'i-coffee.me', 'i-cup', 'i-talcorner', 'ibiskitchen', 'iceembassy', 'icoffee', 'idcafe', 'idothekitchenv.2', 'ikigai', 'ilbarolo', 'ilborgo', 'ilforno', 'ilikewine', 'ilikewine2.0', 'illetterato', 'illy', 'ilmio', 'ilovecake', 'ilpittore', 'ilpizzaiolo', 'iltocco', 'iltomato', 'ilпатио', 'impress', 'ineeddoner', 'introvert.place', 'iphocafe', 'ippo', 'iqcoffee', 'iqкофе', 'istanbul', 'istanbulkebab', 'istanbullhouse', "it'sсот-кофейня", 'iteamcoffee', 'ivoirecafe', 'izakaya', 'j&jcafemoscow', "j'pan", 'ja-jo', 'jamamaiasiankitchen&bar', 'janiscafe', 'japcake', 'jaya', 'jaz-jiz', 'jedicoon', "jeffrey's", "jeffrey'scoffee", "jeffrey'scoffeeshop", "jeffrey'sкофеисидр", 'jeffrey’scoffeeshop', 'jinju', 'joepizza', "johngilroy'spub", 'johnnyleepizza&halalfood', 'jolene', 'joon', 'juliboncafe', 'junglebrothers', 'just', 'justcoffee', 'k-town', 'k-townkoreanbbq', 'kafin', 'kaifprovenance', 'kalabasa', 'kano', 'karavan', 'karmacoffee', 'kathrin’sbakery', 'kavabanga-food', 'kayacoffeeshop', 'kebabs', 'kebabtime', 'kenza', 'khaitfood', 'kikidze', 'killfish', 'kimpab', 'kinohome', 'kiosk11', 'kiosk1936', 'kitchen', 'kitchenforyou', 'kitsune', 'kle_docafe', 'knockoutcoffee', 'koinori', 'koji', 'kojiro', 'kollektiv', 'koolicha', 'koreanalight', 'koreanchick', 'kraskovka', 'krispykreme', 'ku:раменизакаябар', 'kulinari', 'kumatosakana', 'kurkuma', 'kurnik', 'kuzina', 'kuzukebab', 'kvartal', 'kvartalgreengarden', 'labellezza', 'labulka', 'lacabana-africana', 'lacafe', 'lacapitale', 'lacasa', 'laffalaffa', 'lalaland', 'lamadjo', 'lamaroush', 'lamm’s', 'lamortazza', 'lancheriaartplay', 'langet', 'laoleeплешка', 'lapausa', 'lapizzabomba', 'laprovincia', 'larionov', 'larry&krabs', 'larsvegans', 'laserlandкафе', 'lataverna', 'latteria1963', 'lavanda', 'lavapizza', 'lavash', 'lavazza', 'lavaш', 'lavburger', 'lavcafe', 'laveranda', 'laverona', 'laviecafe', 'lavilla', 'lavшашлык', 'lawandastore', 'laybay', 'layerzbakery', 'laвилка', 'lcafe', 'lechatongris', 'leffecafe', 'lelekitchen&wine', 'leocoffee', 'leon', 'lepetitparis', 'leprocopedumatin', 'les', "let'srock", 'levant/شام', 'levinbakehouse', 'leкруассан', 'lifefood', 'liftcoffee&grill', 'likeburger&pizzetta', 'likecafe', 'lino', 'lion', 'lisobon', 'littlepandacafe', 'littleskidsplaycafe', 'livingroom', 'lobby', 'local', 'localkitchen', 'locals', 'loft-cafeакадемия', 'loft45', 'logovo', 'lollo', 'loochi', 'loribar', 'loro', 'lostbar', 'louisfusion', 'loungebar', 'love&eat', 'lovelavash', 'lovers', 'luckybakery', 'luckycheesepizza', 'luckyeye', 'luckyeye.ближневосточнойloungebar', 'luckyizakayabar', 'lumicino', 'lunch', 'lunch&box', 'lunchcity', 'lunchpoint', 'lureoysterbar', "lusy'spizza", 'lutom', 'lyanson’scoffee', 'mac&cheese', 'macadamia', 'macherebistro', 'madamyen', 'madisonrestaurant&club', 'madseason', 'madwinebar', 'maestrello', 'mafe', 'magaria', 'magiccoffee', 'mainfood', 'mamamai', 'mammamia', 'mandarincombustible', 'mangal', 'mangalhouse', 'mangogril', "manny'sburger", 'mansardrestaurantandhall', 'manufaktura', 'margarita', 'marie', 'marketplace', 'markschoice', 'marmi', 'maroon', 'marrakesh', 'martinez', 'marxurbangrill', 'mashup', 'masseterkitchen&bar', 'mastersuitcafe', 'matchabar', 'matreshka', 'maxbakery', 'maximus', 'maxlevel', 'maya', 'mañana', 'maппа', 'mealpleasure', 'meat&more', ...]
data['name']=data['name'].str.replace('доминос', 'домино\'c')
data['name']=data['name'].str.replace('хинкали-gaли', 'хинкали-gали!')
data['name']=data['name'].str.replace('хинкали-gали', 'хинкали-gали!')
data['name']=data['name'].str.replace('хинкалиgали', 'хинкали-gали!')
data['name']=data['name'].str.replace('хинкалиgали!', 'хинкали-gали!')
data['name']=data['name'].str.replace('хинкали-gали!!', 'хинкали-gали!')
data['name']=data['name'].str.replace('яндекславка', 'яндекс.лавка')
data['name'].duplicated().sum()
2924
data['chain'].sum()
3205
data_chain = data.pivot_table(index ='name', values='chain', aggfunc=('count','sum')).sort_values('name')
data_chain
| count | sum | |
|---|---|---|
| name | ||
| #кешбэккафе | 1 | 0 |
| +39pizzeriamozzarellabar | 1 | 0 |
| 1-якреветочная | 1 | 1 |
| 1001ночь | 1 | 0 |
| 100ловая | 1 | 0 |
| ... | ... | ... |
| яуза | 1 | 0 |
| ящамс | 1 | 0 |
| ё-ланч | 2 | 2 |
| ёжиустрица | 1 | 0 |
| ёрш | 2 | 2 |
5482 rows × 2 columns
data_chain.query('count>1')
| count | sum | |
|---|---|---|
| name | ||
| 10идеальныхпицц | 3 | 3 |
| 18грамм | 3 | 3 |
| 7сэндвичей | 4 | 4 |
| 8вафель | 2 | 2 |
| 9barcoffee | 8 | 7 |
| ... | ... | ... |
| яндекс.лавка | 72 | 72 |
| янпримус | 3 | 3 |
| японскаякухня | 4 | 4 |
| ё-ланч | 2 | 2 |
| ёрш | 2 | 2 |
758 rows × 2 columns
</div>
# Исправим ошибки в присвоении признака сетевого заведения в зависимости от количество заведений:
exsept=['ресторан','столовая','пиццерия','кафе','буфет','пицца','шаурма']
names=data.query('name not in @exsept')['name'].unique()
for name in names:
if data.loc[(data['name']==name),'chain'].count()==1:
data.loc[(data['name']==name), 'chain'] = 0
else:
data.loc[(data['name']==name),'chain'] = data.loc[(data['name']==name), 'chain'].replace(0, 1)
data_chain_corr = data.pivot_table(index ='name', values='chain', aggfunc=('count','sum')).sort_values('name')
data_chain_corr
| count | sum | |
|---|---|---|
| name | ||
| #кешбэккафе | 1 | 0 |
| +39pizzeriamozzarellabar | 1 | 0 |
| 1-якреветочная | 1 | 0 |
| 1001ночь | 1 | 0 |
| 100ловая | 1 | 0 |
| ... | ... | ... |
| яуза | 1 | 0 |
| ящамс | 1 | 0 |
| ё-ланч | 2 | 2 |
| ёжиустрица | 1 | 0 |
| ёрш | 2 | 2 |
5482 rows × 2 columns
data_chain_corr.query('count>1')
| count | sum | |
|---|---|---|
| name | ||
| 10идеальныхпицц | 3 | 3 |
| 18грамм | 3 | 3 |
| 7сэндвичей | 4 | 4 |
| 8вафель | 2 | 2 |
| 9barcoffee | 8 | 8 |
| ... | ... | ... |
| яндекс.лавка | 72 | 72 |
| янпримус | 3 | 3 |
| японскаякухня | 4 | 4 |
| ё-ланч | 2 | 2 |
| ёрш | 2 | 2 |
758 rows × 2 columns
data['chain'].sum()
3377
</div>
data['address']=data['address'].str.replace('Коптевский бульвар д 18 А стр 1','Коптевский бульвар, д 18, А, стр 1')
data['address']=data['address'].str.replace('улица Шкулёва 4','улица Шкулёва, 4')
data['address']=data['address'].str.replace('Москва, Сумская, 2/12','Москва, Сумская улица, 2/12')
data['address']=data['address'].str.replace('пр-т Комсомольский','Комсомольский проспект')
pattern = ('\,*,((([-а-яА-Яё0-9\.\s"]*)?)(улица|ул.|переулок|шоссе|проспект|площадь|проезд|аллея|бульвар|набережная|тупик|линия|парк|район|квартал|сквер|сад|заказник|памятник|просек|кольцо|мост|музей|тоннель|километр)(([-а-яА-Яё0-9\.\s"]*)?))\,?')
data['street'] = data['address'].str.extract(pat = pattern)[0]
data['street'] = data['street'].replace(r"^ +| +$", r"", regex=True)
data.head(5)
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | street | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | wowфли | кафе | Москва, улица Дыбенко, 7/1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.878494 | 37.478860 | 5.0 | NaN | NaN | NaN | NaN | 0 | NaN | улица Дыбенко |
| 1 | четырекомнаты | ресторан | Москва, улица Дыбенко, 36, корп. 1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.875801 | 37.484479 | 4.5 | выше среднего | Средний счёт:1500–1600 ₽ | 1550.0 | NaN | 0 | 4.0 | улица Дыбенко |
| 2 | хазри | кафе | Москва, Клязьминская улица, 15 | Северный административный округ | пн-чт 11:00–02:00; пт,сб 11:00–05:00; вс 11:00... | 55.889146 | 37.525901 | 4.6 | средние | Средний счёт:от 1000 ₽ | 1000.0 | NaN | 0 | 45.0 | Клязьминская улица |
| 3 | dormousecoffeeshop | кофейня | Москва, улица Маршала Федоренко, 12 | Северный административный округ | ежедневно, 09:00–22:00 | 55.881608 | 37.488860 | 5.0 | NaN | Цена чашки капучино:155–185 ₽ | NaN | 170.0 | 0 | NaN | улица Маршала Федоренко |
| 4 | ильмарко | пиццерия | Москва, Правобережная улица, 1Б | Северный административный округ | ежедневно, 10:00–22:00 | 55.881166 | 37.449357 | 5.0 | средние | Средний счёт:400–600 ₽ | 500.0 | NaN | 1 | 148.0 | Правобережная улица |
data[data['street'].isna()]
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | street | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6309 | енот | кафе | Москва, № 7 | Южный административный округ | NaN | 55.679064 | 37.615015 | 4.8 | NaN | NaN | NaN | NaN | 0 | NaN | NaN |
</div>
data['street']=data['street'].fillna(data['district'])
</div>
data['hours'].sort_values().unique().tolist()
['Нет информации', 'вт 08:30–17:00; ср,чт 12:00–20:30; пт 08:30–17:00; сб 09:00–16:30', 'вт 13:00–21:00; ср 11:00–20:00; чт 13:00–21:00; пт-вс 11:00–20:00', 'вт,чт 10:00–18:00', 'вт,чт,пт,сб,вс 08:00–23:00', 'вт-вс 09:00–19:00', 'вт-вс 09:00–21:00', 'вт-вс 10:00–18:00', 'вт-вс 10:00–20:00', 'вт-вс 10:00–21:00', 'вт-вс 10:00–22:00', 'вт-вс 10:30–22:00', 'вт-вс 10:45–21:00', 'вт-вс 11:00–20:00', 'вт-вс 11:00–23:00', 'вт-вс 12:00–00:00', 'вт-вс 12:00–20:00', 'вт-вс 12:00–21:00', 'вт-вс 12:00–23:00', 'вт-вс 12:00–23:00, перерыв 17:00–18:00', 'вт-вс 14:00–22:00', 'вт-вс 17:00–23:00', 'вт-вс 19:00–06:00', 'вт-вс круглосуточно', 'вт-пт 09:00–22:00; сб,вс 10:00–22:00', 'вт-пт 12:00–20:00; сб,вс 12:00–22:00', 'вт-сб 09:00–18:00', 'вт-сб 09:00–21:00', 'вт-сб 12:00–21:00', 'вт-сб 17:00–00:00', 'вт-сб 20:00–06:00', 'вт-чт 10:00–20:30; пт,сб 10:00–21:30; вс 10:00–20:30', 'вт-чт 12:00–00:00; пт,сб 12:00–05:00; вс 12:00–00:00', 'вт-чт 12:00–23:00; пт 12:00–02:00; сб 15:00–02:00', 'вт-чт 14:00–00:00; пт,сб 14:00–03:00; вс 14:00–00:00', 'вт-чт 15:00–00:00; пт,сб 17:00–05:00', 'вт-чт 17:00–00:00; пт 17:00–03:00; сб 12:00–03:00; вс 12:00–00:00', 'вт-чт 18:00–00:00; пт,сб 18:00–03:00; вс 18:00–00:00', 'ежедневно, 04:00–18:00', 'ежедневно, 05:00–00:00', 'ежедневно, 05:00–02:00', 'ежедневно, 05:00–03:00', 'ежедневно, 05:00–19:00', 'ежедневно, 06:00–00:00', 'ежедневно, 06:00–02:00', 'ежедневно, 06:00–02:55', 'ежедневно, 06:00–03:00', 'ежедневно, 06:00–18:00', 'ежедневно, 06:00–19:00', 'ежедневно, 06:00–20:00', 'ежедневно, 06:00–21:00', 'ежедневно, 06:00–23:00', 'ежедневно, 06:30–11:00', 'ежедневно, 06:30–18:30', 'ежедневно, 06:30–22:30', 'ежедневно, 06:30–23:00', 'ежедневно, 06:30–23:00, перерыв 11:00–12:00', 'ежедневно, 06:55–22:05', 'ежедневно, 07:00–00:00', 'ежедневно, 07:00–01:00', 'ежедневно, 07:00–02:00', 'ежедневно, 07:00–03:00', 'ежедневно, 07:00–05:00', 'ежедневно, 07:00–17:00', 'ежедневно, 07:00–18:00', 'ежедневно, 07:00–19:00', 'ежедневно, 07:00–20:00', 'ежедневно, 07:00–21:00', 'ежедневно, 07:00–21:30', 'ежедневно, 07:00–22:00', 'ежедневно, 07:00–22:30', 'ежедневно, 07:00–23:00', 'ежедневно, 07:00–23:00, перерыв 11:00–12:00', 'ежедневно, 07:15–20:00', 'ежедневно, 07:30–00:00', 'ежедневно, 07:30–00:30', 'ежедневно, 07:30–02:00', 'ежедневно, 07:30–11:00', 'ежедневно, 07:30–20:00', 'ежедневно, 07:30–21:00', 'ежедневно, 07:30–22:00', 'ежедневно, 07:30–23:00', 'ежедневно, 07:40–22:00', 'ежедневно, 07:45–21:30', 'ежедневно, 07:50–21:00', 'ежедневно, 08:00–00:00', 'ежедневно, 08:00–01:00', 'ежедневно, 08:00–02:00', 'ежедневно, 08:00–03:00', 'ежедневно, 08:00–05:00', 'ежедневно, 08:00–06:00', 'ежедневно, 08:00–17:00', 'ежедневно, 08:00–18:00', 'ежедневно, 08:00–18:30', 'ежедневно, 08:00–18:45', 'ежедневно, 08:00–19:00', 'ежедневно, 08:00–19:30', 'ежедневно, 08:00–20:00', 'ежедневно, 08:00–21:00', 'ежедневно, 08:00–21:30', 'ежедневно, 08:00–22:00', 'ежедневно, 08:00–22:30', 'ежедневно, 08:00–22:45', 'ежедневно, 08:00–23:00', 'ежедневно, 08:00–23:55', 'ежедневно, 08:30–00:00', 'ежедневно, 08:30–18:00', 'ежедневно, 08:30–18:30', 'ежедневно, 08:30–19:00', 'ежедневно, 08:30–20:00', 'ежедневно, 08:30–20:30', 'ежедневно, 08:30–21:00', 'ежедневно, 08:30–21:30', 'ежедневно, 08:30–22:00', 'ежедневно, 08:30–22:30', 'ежедневно, 08:30–23:00', 'ежедневно, 08:30–23:30', 'ежедневно, 09:00–00:00', 'ежедневно, 09:00–01:00', 'ежедневно, 09:00–01:30', 'ежедневно, 09:00–01:45', 'ежедневно, 09:00–02:00', 'ежедневно, 09:00–03:00', 'ежедневно, 09:00–05:00', 'ежедневно, 09:00–06:00', 'ежедневно, 09:00–11:00', 'ежедневно, 09:00–16:00', 'ежедневно, 09:00–17:00', 'ежедневно, 09:00–18:00', 'ежедневно, 09:00–19:00', 'ежедневно, 09:00–20:00', 'ежедневно, 09:00–20:30', 'ежедневно, 09:00–21:00', 'ежедневно, 09:00–21:30', 'ежедневно, 09:00–22:00', 'ежедневно, 09:00–22:30', 'ежедневно, 09:00–23:00', 'ежедневно, 09:00–23:00, перерыв 12:00–12:15', 'ежедневно, 09:00–23:30', 'ежедневно, 09:00–23:45', 'ежедневно, 09:15–21:00', 'ежедневно, 09:30–15:45', 'ежедневно, 09:30–18:30', 'ежедневно, 09:30–21:00', 'ежедневно, 09:30–21:30', 'ежедневно, 09:30–22:00', 'ежедневно, 09:30–22:30', 'ежедневно, 09:30–23:00', 'ежедневно, 10:00–00:00', 'ежедневно, 10:00–00:30', 'ежедневно, 10:00–01:00', 'ежедневно, 10:00–02:00', 'ежедневно, 10:00–03:00', 'ежедневно, 10:00–04:00', 'ежедневно, 10:00–04:30', 'ежедневно, 10:00–05:00', 'ежедневно, 10:00–06:00', 'ежедневно, 10:00–16:30', 'ежедневно, 10:00–17:00', 'ежедневно, 10:00–18:00', 'ежедневно, 10:00–19:00', 'ежедневно, 10:00–19:30', 'ежедневно, 10:00–20:00', 'ежедневно, 10:00–20:30', 'ежедневно, 10:00–21:00', 'ежедневно, 10:00–21:30', 'ежедневно, 10:00–21:45', 'ежедневно, 10:00–21:55', 'ежедневно, 10:00–22:00', 'ежедневно, 10:00–22:00, перерыв 12:00–13:00', 'ежедневно, 10:00–22:00, перерыв 16:00–16:20', 'ежедневно, 10:00–22:30', 'ежедневно, 10:00–22:40', 'ежедневно, 10:00–22:45', 'ежедневно, 10:00–22:50', 'ежедневно, 10:00–23:00', 'ежедневно, 10:00–23:10', 'ежедневно, 10:00–23:30', 'ежедневно, 10:00–23:50', 'ежедневно, 10:05–22:05', 'ежедневно, 10:15–22:45', 'ежедневно, 10:30–00:00', 'ежедневно, 10:30–06:00', 'ежедневно, 10:30–21:00', 'ежедневно, 10:30–21:30', 'ежедневно, 10:30–22:00', 'ежедневно, 10:30–22:30', 'ежедневно, 10:30–22:45', 'ежедневно, 10:30–23:00', 'ежедневно, 10:45–22:45', 'ежедневно, 11:00–00:00', 'ежедневно, 11:00–00:30', 'ежедневно, 11:00–01:00', 'ежедневно, 11:00–02:00', 'ежедневно, 11:00–03:00', 'ежедневно, 11:00–04:00', 'ежедневно, 11:00–05:00', 'ежедневно, 11:00–06:00', 'ежедневно, 11:00–10:00', 'ежедневно, 11:00–17:00', 'ежедневно, 11:00–18:00', 'ежедневно, 11:00–18:45', 'ежедневно, 11:00–19:00', 'ежедневно, 11:00–20:00', 'ежедневно, 11:00–20:30', 'ежедневно, 11:00–21:00', 'ежедневно, 11:00–21:30', 'ежедневно, 11:00–21:45', 'ежедневно, 11:00–22:00', 'ежедневно, 11:00–22:30', 'ежедневно, 11:00–22:40', 'ежедневно, 11:00–22:45', 'ежедневно, 11:00–22:50', 'ежедневно, 11:00–23:00', 'ежедневно, 11:00–23:25', 'ежедневно, 11:00–23:30', 'ежедневно, 11:00–23:45', 'ежедневно, 11:30–00:00', 'ежедневно, 11:30–00:30', 'ежедневно, 11:30–02:00', 'ежедневно, 11:30–03:00', 'ежедневно, 11:30–05:00', 'ежедневно, 11:30–21:00', 'ежедневно, 11:30–21:30', 'ежедневно, 11:30–22:00', 'ежедневно, 11:30–22:45', 'ежедневно, 11:30–23:00', 'ежедневно, 11:30–23:30', 'ежедневно, 11:45–22:30', 'ежедневно, 12:00–00:00', 'ежедневно, 12:00–00:30', 'ежедневно, 12:00–01:00', 'ежедневно, 12:00–02:00', 'ежедневно, 12:00–03:00', 'ежедневно, 12:00–04:00', 'ежедневно, 12:00–05:00', 'ежедневно, 12:00–06:00', 'ежедневно, 12:00–14:00', 'ежедневно, 12:00–16:00', 'ежедневно, 12:00–20:00', 'ежедневно, 12:00–21:00', 'ежедневно, 12:00–21:30', 'ежедневно, 12:00–22:00', 'ежедневно, 12:00–22:00, перерыв 15:00–16:00', 'ежедневно, 12:00–22:45', 'ежедневно, 12:00–23:00', 'ежедневно, 12:00–23:30', 'ежедневно, 12:00–23:45', 'ежедневно, 12:30–23:00', 'ежедневно, 13:00–00:00', 'ежедневно, 13:00–01:00', 'ежедневно, 13:00–04:00', 'ежедневно, 13:00–22:00', 'ежедневно, 13:00–23:00', 'ежедневно, 14:00–01:30', 'ежедневно, 14:00–02:00', 'ежедневно, 14:00–22:00', 'ежедневно, 14:00–23:00', 'ежедневно, 15:00–00:00', 'ежедневно, 15:00–04:00', 'ежедневно, 15:00–05:00', 'ежедневно, 16:00–00:00', 'ежедневно, 16:00–04:00', 'ежедневно, 16:00–06:00', 'ежедневно, 16:00–23:00', 'ежедневно, 17:00–00:00', 'ежедневно, 17:00–05:00', 'ежедневно, 18:00–02:00', 'ежедневно, 18:00–05:00', 'ежедневно, 18:00–05:30', 'ежедневно, 18:00–06:00', 'ежедневно, 18:50–06:00', 'ежедневно, 19:00–06:00', 'ежедневно, 21:00–04:00', 'ежедневно, 22:00–06:00', 'ежедневно, круглосуточно', 'пн 00:00–12:00, перерыв 12:00–13:00; вт-чт 13:00–12:00; пт 13:00–00:00', 'пн 00:00–21:00; вт-сб 09:00–21:00; вс 00:00–21:00', 'пн 00:01–12:00, перерыв 12:00–13:30; вт-чт 13:30–12:00; пт 13:30–00:00; сб,вс круглосуточно', 'пн 06:00–00:00; вт-вс круглосуточно', 'пн 08:00–18:00; вт-сб 07:00–19:00; вс 08:00–18:00', 'пн 08:00–19:00; вт-пт 08:00–21:00; сб,вс 09:30–21:00', 'пн 08:00–19:00; вт-сб 07:00–19:00; вс 10:00–17:00', 'пн 08:00–19:30; вт-пт 08:00–21:00; сб,вс 09:30–21:00', 'пн 08:00–23:00; вт-вс круглосуточно', 'пн 08:00–23:00; вт-пт 08:00–00:00; сб круглосуточно; вс 00:00–23:00', 'пн 10:00–00:00; вт-сб круглосуточно; вс 00:00–23:00', 'пн 10:00–20:00', 'пн 10:30–04:00; вт 11:00–03:00; ср 10:30–03:00; чт 10:00–03:00; пт,сб 11:00–04:00; вс 10:30–04:00', 'пн 11:00–23:00; вт-вс 11:00–00:00', 'пн 12:00–00:00; вт-вс 12:00–06:00', 'пн 12:00–00:00; вт-чт 12:00–01:00; пт,сб 12:00–03:00; вс 12:00–00:00', 'пн 12:00–02:00; вт-вс 11:30–02:00', 'пн 12:00–20:00; вт-пт 12:00–23:00', 'пн 12:00–22:00; вт-пт 10:00–22:00; сб,вс 09:00–22:00', 'пн 12:32–00:00; вс 00:00–12:00, перерыв 12:00–12:32', 'пн 13:00–00:00; вт-вс 10:00–00:00', 'пн 15:00–04:00; вт-вс 15:00–05:00', 'пн 16:00–23:00; вт-пт 12:00–23:00; сб,вс 11:00–23:00', 'пн круглосуточно; вт-чт 12:00–00:00; пт 12:00–02:00; сб 11:00–02:00; вс 14:00–00:00', 'пн,вс 18:00–22:30', 'пн,вт 07:30–23:00; ср-вс круглосуточно', 'пн,вт 08:00–22:00; ср,чт 08:00–23:00; пт,сб круглосуточно; вс 00:00–22:00', 'пн,вт 08:00–22:00; ср-пт 08:00–23:00; сб 10:00–23:00; вс 10:00–22:00', 'пн,вт 09:00–00:00; ср-пт 09:00–06:00; сб 10:00–06:00; вс 10:00–00:00', 'пн,вт 09:00–21:00; ср-пт 09:00–22:00; сб 10:00–22:00; вс 10:00–21:00', 'пн,вт 09:00–23:30; ср-вс 08:00–03:00', 'пн,вт 10:00–00:00; ср,чт 10:00–01:00; пт,сб 10:00–02:00; вс 10:00–00:00', 'пн,вт 10:00–00:00; ср-вс круглосуточно', 'пн,вт 10:00–23:00; ср-пт 10:00–00:00; сб,вс 11:00–23:00', 'пн,вт 11:00–20:00; ср,чт 12:00–21:00; пт-вс 11:00–20:00', 'пн,вт 11:00–23:00; ср,чт 11:00–03:00; пт,сб 11:00–05:00; вс 11:00–23:00', 'пн,вт 12:00–00:00; ср-пт 12:00–06:00; сб 15:00–06:00; вс 12:00–00:00', 'пн,вт 12:00–00:00; ср-сб 12:00–05:00; вс 12:00–00:00', 'пн,вт 12:00–22:30; чт 14:30–00:30; пт,сб 16:30–04:30; вс 15:30–22:30', 'пн,вт 12:00–23:00; ср-пт 12:00–00:00; сб 14:00–00:00; вс 14:00–23:00', 'пн,вт,ср,пт,сб,вс 09:00–22:00', 'пн,вт,ср,чт,вс 10:00–22:00', 'пн,вт,ср,чт,вс 11:00–22:00', 'пн,вт,ср,чт,пт,вс 09:00–20:00', 'пн,вт,ср,чт,сб,вс круглосуточно', 'пн,вт,чт,пт,сб,вс 09:00–15:30', 'пн,ср,чт,пт,сб,вс 06:00–17:00', 'пн,ср,чт,пт,сб,вс 12:00–03:00', 'пн,ср,чт,пт,сб,вс 15:00–19:00', 'пн,ср,чт,пт,сб,вс круглосуточно', 'пн-пт 06:00–16:00; сб,вс 08:00–12:00', 'пн-пт 06:30–00:00; сб,вс 08:00–23:00', 'пн-пт 06:30–21:30; сб 07:30–21:30; вс 08:30–21:30', 'пн-пт 06:30–23:00; сб,вс 07:00–23:00', 'пн-пт 07:00–00:00; сб,вс 08:00–00:00', 'пн-пт 07:00–01:00, перерыв 12:00–13:00', 'пн-пт 07:00–16:00; сб,вс 07:00–11:00', 'пн-пт 07:00–17:00; сб,вс 08:00–11:00', 'пн-пт 07:00–17:30', 'пн-пт 07:00–18:00', 'пн-пт 07:00–19:00', 'пн-пт 07:00–19:00; сб 10:00–17:00', 'пн-пт 07:00–20:00', 'пн-пт 07:00–20:00; сб,вс 08:00–20:00', 'пн-пт 07:00–20:00; сб,вс 08:00–21:00', 'пн-пт 07:00–20:00; сб,вс 09:00–18:00', 'пн-пт 07:00–20:00; сб,вс 09:00–19:00', 'пн-пт 07:00–20:00; сб,вс 09:00–20:00', 'пн-пт 07:00–20:00; сб,вс 10:00–18:00', 'пн-пт 07:00–20:00; сб,вс 11:00–20:00', 'пн-пт 07:00–21:00', 'пн-пт 07:00–21:00, перерывы 10:00–12:00, 15:30–18:00; сб 07:00–21:00', 'пн-пт 07:00–21:00; сб 07:00–18:00', 'пн-пт 07:00–21:00; сб 07:00–20:00; вс 08:00–20:00', 'пн-пт 07:00–21:00; сб 08:00–21:00; вс 08:00–20:00', 'пн-пт 07:00–21:00; сб,вс 07:00–19:00', 'пн-пт 07:00–21:00; сб,вс 08:00–18:00', 'пн-пт 07:00–21:00; сб,вс 08:00–20:00', 'пн-пт 07:00–21:00; сб,вс 08:00–21:00', 'пн-пт 07:00–21:00; сб,вс 09:00–20:00', 'пн-пт 07:00–21:00; сб,вс 09:00–21:00', 'пн-пт 07:00–21:00; сб,вс 09:00–22:00', 'пн-пт 07:00–22:00; сб 08:00–21:00; вс 09:00–21:00', 'пн-пт 07:00–22:00; сб 08:00–22:00; вс 08:00–21:00', 'пн-пт 07:00–22:00; сб 08:00–22:00; вс 08:30–22:00', 'пн-пт 07:00–22:00; сб 08:00–22:00; вс 09:00–21:00', 'пн-пт 07:00–22:00; сб 09:00–21:00', 'пн-пт 07:00–22:00; сб,вс 07:00–21:00', 'пн-пт 07:00–22:00; сб,вс 07:00–23:00', 'пн-пт 07:00–22:00; сб,вс 07:30–22:00', 'пн-пт 07:00–22:00; сб,вс 08:00–21:00', 'пн-пт 07:00–22:00; сб,вс 08:00–22:00', 'пн-пт 07:00–22:00; сб,вс 09:00–22:00', 'пн-пт 07:00–22:00; сб,вс 10:00–22:00', 'пн-пт 07:00–22:30; сб,вс 08:00–22:00', 'пн-пт 07:00–23:00; сб 07:30–23:00; вс 08:00–23:00', 'пн-пт 07:00–23:00; сб 08:00–23:00; вс 08:00–22:00', 'пн-пт 07:00–23:00; сб,вс 07:30–23:00', 'пн-пт 07:00–23:00; сб,вс 08:00–22:00', 'пн-пт 07:00–23:00; сб,вс 08:00–23:00', 'пн-пт 07:00–23:00; сб,вс 08:30–23:00', 'пн-пт 07:00–23:00; сб,вс 09:00–22:00', 'пн-пт 07:00–23:00; сб,вс 09:00–23:00', 'пн-пт 07:00–23:00; сб,вс 10:00–22:00', 'пн-пт 07:30–00:00; сб,вс 10:00–00:00', 'пн-пт 07:30–16:30', 'пн-пт 07:30–17:00; сб,вс 12:00–15:00', 'пн-пт 07:30–17:30', 'пн-пт 07:30–18:00', 'пн-пт 07:30–18:30', 'пн-пт 07:30–19:00', 'пн-пт 07:30–19:30', 'пн-пт 07:30–19:30; сб,вс 09:00–19:30', 'пн-пт 07:30–19:30; сб,вс 09:00–20:00', 'пн-пт 07:30–19:30; сб,вс 10:00–18:00', 'пн-пт 07:30–19:30; сб,вс 10:30–19:30', 'пн-пт 07:30–20:00', 'пн-пт 07:30–20:00; сб,вс 09:00–19:00', 'пн-пт 07:30–20:00; сб,вс 09:00–20:00', 'пн-пт 07:30–20:00; сб,вс 10:00–19:00', 'пн-пт 07:30–20:00; сб,вс 10:00–20:00', 'пн-пт 07:30–20:30; сб 07:30–19:30; вс 08:30–19:30', 'пн-пт 07:30–20:30; сб,вс 08:00–20:30', 'пн-пт 07:30–21:00', 'пн-пт 07:30–21:00; сб 08:00–20:00; вс 08:00–18:00', 'пн-пт 07:30–21:00; сб 08:00–21:00; вс 09:00–21:00', 'пн-пт 07:30–21:00; сб,вс 07:30–19:00', 'пн-пт 07:30–21:00; сб,вс 08:00–20:00', 'пн-пт 07:30–21:00; сб,вс 08:00–21:00', 'пн-пт 07:30–21:00; сб,вс 08:30–20:30', 'пн-пт 07:30–21:00; сб,вс 08:30–21:00', 'пн-пт 07:30–21:00; сб,вс 09:00–19:00', 'пн-пт 07:30–21:00; сб,вс 09:00–19:30', 'пн-пт 07:30–21:00; сб,вс 09:00–21:00', 'пн-пт 07:30–21:00; сб,вс 09:30–21:00', 'пн-пт 07:30–21:00; сб,вс 10:00–20:00', 'пн-пт 07:30–21:00; сб,вс 10:00–21:00', 'пн-пт 07:30–22:00', 'пн-пт 07:30–22:00; сб 08:00–22:00; вс 09:00–21:00', 'пн-пт 07:30–22:00; сб 08:00–22:00; вс 09:00–22:00', 'пн-пт 07:30–22:00; сб,вс 08:00–22:00', 'пн-пт 07:30–22:00; сб,вс 09:00–22:00', 'пн-пт 07:30–22:00; сб,вс 09:00–23:00', 'пн-пт 07:30–22:00; сб,вс 11:00–21:00', 'пн-пт 07:30–23:00; сб 08:00–22:00; вс 09:00–21:00', 'пн-пт 07:30–23:00; сб,вс 08:00–22:00', 'пн-пт 07:30–23:00; сб,вс 08:30–22:00', 'пн-пт 07:30–23:00; сб,вс 08:30–23:00', 'пн-пт 07:30–23:00; сб,вс 09:00–21:00', 'пн-пт 07:30–23:00; сб,вс 09:00–23:00', 'пн-пт 07:45–20:00', 'пн-пт 07:45–20:00; сб,вс 10:00–20:00', 'пн-пт 07:45–21:00; сб,вс 10:00–20:00', 'пн-пт 07:59–21:00; сб,вс 08:59–21:00', 'пн-пт 08:00–00:00', 'пн-пт 08:00–00:00; сб 09:00–00:00; вс 09:30–00:00', 'пн-пт 08:00–00:00; сб,вс 08:00–18:00', 'пн-пт 08:00–00:00; сб,вс 09:00–00:00', 'пн-пт 08:00–00:00; сб,вс 10:00–00:00', 'пн-пт 08:00–00:00; сб,вс 11:00–00:00', 'пн-пт 08:00–00:00; сб,вс 11:00–23:00', 'пн-пт 08:00–00:00; сб,вс 13:00–01:00', 'пн-пт 08:00–02:00; сб,вс 08:00–03:00', 'пн-пт 08:00–02:00; сб,вс 12:00–02:00', 'пн-пт 08:00–16:00', 'пн-пт 08:00–16:30', 'пн-пт 08:00–16:30; сб,вс 08:00–10:30', 'пн-пт 08:00–17:00', 'пн-пт 08:00–17:00, перерыв 12:00–13:00', 'пн-пт 08:00–17:00; сб,вс 09:00–21:00', 'пн-пт 08:00–17:30', 'пн-пт 08:00–17:30; сб 09:00–16:30', 'пн-пт 08:00–18:00', 'пн-пт 08:00–18:00; сб 09:00–14:00', 'пн-пт 08:00–18:00; сб,вс 08:00–17:00', 'пн-пт 08:00–18:00; сб,вс 10:00–22:00', 'пн-пт 08:00–18:30', 'пн-пт 08:00–19:00', 'пн-пт 08:00–19:00; сб 08:00–18:30', 'пн-пт 08:00–19:00; сб 09:00–15:00', 'пн-пт 08:00–19:00; сб 09:00–19:00', 'пн-пт 08:00–19:00; сб 10:00–16:00', 'пн-пт 08:00–19:00; сб 10:00–18:00', 'пн-пт 08:00–19:00; сб,вс 08:00–18:00', 'пн-пт 08:00–19:00; сб,вс 08:30–18:00', 'пн-пт 08:00–19:00; сб,вс 09:00–15:00', 'пн-пт 08:00–19:00; сб,вс 09:00–17:00', 'пн-пт 08:00–19:00; сб,вс 09:00–18:00', 'пн-пт 08:00–19:00; сб,вс 09:00–19:00', 'пн-пт 08:00–19:00; сб,вс 10:00–17:00', 'пн-пт 08:00–19:30', 'пн-пт 08:00–20:00', 'пн-пт 08:00–20:00; сб 08:00–18:00; вс 09:00–18:00', 'пн-пт 08:00–20:00; сб 09:00–15:00', 'пн-пт 08:00–20:00; сб 09:00–17:00', 'пн-пт 08:00–20:00; сб 09:00–18:00', 'пн-пт 08:00–20:00; сб 09:00–19:00', 'пн-пт 08:00–20:00; сб 09:00–20:00', 'пн-пт 08:00–20:00; сб 09:00–21:00; вс 09:00–20:00', 'пн-пт 08:00–20:00; сб 10:00–16:00', 'пн-пт 08:00–20:00; сб 10:00–18:00', 'пн-пт 08:00–20:00; сб 10:00–20:00', 'пн-пт 08:00–20:00; сб 10:00–20:00; вс 12:30–20:00', 'пн-пт 08:00–20:00; сб 12:00–20:00', 'пн-пт 08:00–20:00; сб,вс 08:00–18:00', 'пн-пт 08:00–20:00; сб,вс 08:30–19:30', 'пн-пт 08:00–20:00; сб,вс 09:00–17:00', 'пн-пт 08:00–20:00; сб,вс 09:00–18:00', 'пн-пт 08:00–20:00; сб,вс 09:00–19:00', 'пн-пт 08:00–20:00; сб,вс 09:00–20:00', 'пн-пт 08:00–20:00; сб,вс 09:00–21:00', 'пн-пт 08:00–20:00; сб,вс 10:00–15:00', 'пн-пт 08:00–20:00; сб,вс 10:00–18:00', 'пн-пт 08:00–20:00; сб,вс 10:00–19:00', 'пн-пт 08:00–20:00; сб,вс 10:00–20:00', 'пн-пт 08:00–20:00; сб,вс 10:00–21:00', 'пн-пт 08:00–20:00; сб,вс 11:00–19:00', 'пн-пт 08:00–20:00; сб,вс 11:00–20:00', 'пн-пт 08:00–21:00', 'пн-пт 08:00–21:00; сб 08:00–18:10', 'пн-пт 08:00–21:00; сб 08:00–20:00; вс 09:00–20:00', 'пн-пт 08:00–21:00; сб,вс 07:00–23:00', 'пн-пт 08:00–21:00; сб,вс 08:00–18:00', 'пн-пт 08:00–21:00; сб,вс 08:00–20:00', 'пн-пт 08:00–21:00; сб,вс 09:00–19:00', 'пн-пт 08:00–21:00; сб,вс 09:00–20:00', 'пн-пт 08:00–21:00; сб,вс 09:00–21:00', 'пн-пт 08:00–21:00; сб,вс 09:00–22:00', 'пн-пт 08:00–21:00; сб,вс 09:30–21:00', 'пн-пт 08:00–21:00; сб,вс 09:30–21:30', 'пн-пт 08:00–21:00; сб,вс 10:00–20:00', 'пн-пт 08:00–21:00; сб,вс 10:00–21:00', 'пн-пт 08:00–21:00; сб,вс 10:00–22:00', 'пн-пт 08:00–21:00; сб,вс 11:00–21:00', 'пн-пт 08:00–21:30; сб,вс 09:00–21:30', 'пн-пт 08:00–21:30; сб,вс 10:00–21:30', 'пн-пт 08:00–21:50; сб,вс 09:00–21:50', 'пн-пт 08:00–22:00', 'пн-пт 08:00–22:00; сб 08:00–19:00', 'пн-пт 08:00–22:00; сб 09:00–22:00; вс 10:00–22:00', 'пн-пт 08:00–22:00; сб 09:00–23:00; вс 09:00–22:00', 'пн-пт 08:00–22:00; сб 10:00–20:00', 'пн-пт 08:00–22:00; сб 11:00–22:00; вс 11:00–21:00', 'пн-пт 08:00–22:00; сб 12:00–22:00', 'пн-пт 08:00–22:00; сб,вс 09:00–21:00', 'пн-пт 08:00–22:00; сб,вс 09:00–22:00', 'пн-пт 08:00–22:00; сб,вс 09:00–23:00', 'пн-пт 08:00–22:00; сб,вс 09:30–21:00', 'пн-пт 08:00–22:00; сб,вс 09:30–22:00', 'пн-пт 08:00–22:00; сб,вс 10:00–18:00', 'пн-пт 08:00–22:00; сб,вс 10:00–20:00', 'пн-пт 08:00–22:00; сб,вс 10:00–21:00', 'пн-пт 08:00–22:00; сб,вс 10:00–22:00', 'пн-пт 08:00–22:00; сб,вс 11:00–22:00', 'пн-пт 08:00–22:15; сб 08:00–23:00; вс 08:00–22:00', 'пн-пт 08:00–23:00', 'пн-пт 08:00–23:00; сб 10:00–23:00; вс 10:00–22:00', 'пн-пт 08:00–23:00; сб,вс 09:00–22:00', 'пн-пт 08:00–23:00; сб,вс 09:00–23:00', 'пн-пт 08:00–23:00; сб,вс 10:00–22:00', 'пн-пт 08:00–23:00; сб,вс 10:00–23:00', 'пн-пт 08:00–23:00; сб,вс 11:00–23:00', 'пн-пт 08:15–16:00', 'пн-пт 08:15–18:00', 'пн-пт 08:15–19:45', 'пн-пт 08:20–21:30; сб,вс 10:00–21:30', 'пн-пт 08:30–15:00', 'пн-пт 08:30–16:00', 'пн-пт 08:30–16:30', 'пн-пт 08:30–17:00', 'пн-пт 08:30–17:00; сб,вс 11:00–14:00', 'пн-пт 08:30–17:30', 'пн-пт 08:30–17:50', 'пн-пт 08:30–18:00', 'пн-пт 08:30–18:00; сб 09:00–16:00', 'пн-пт 08:30–18:30', 'пн-пт 08:30–18:30; сб 10:00–20:00', 'пн-пт 08:30–19:00', 'пн-пт 08:30–19:00; сб 09:30–18:00', 'пн-пт 08:30–19:00; сб,вс 10:00–19:00', 'пн-пт 08:30–19:00; сб,вс 11:00–18:00', 'пн-пт 08:30–19:30', 'пн-пт 08:30–20:00', 'пн-пт 08:30–20:00; сб 08:30–17:00', 'пн-пт 08:30–20:00; сб 10:00–19:00', 'пн-пт 08:30–20:00; сб,вс 09:00–20:00', 'пн-пт 08:30–20:00; сб,вс 09:30–20:00', 'пн-пт 08:30–20:00; сб,вс 10:00–18:00', 'пн-пт 08:30–20:00; сб,вс 10:00–20:00', 'пн-пт 08:30–20:30; сб,вс 09:30–19:30', 'пн-пт 08:30–20:30; сб,вс 10:00–21:00', 'пн-пт 08:30–21:00', 'пн-пт 08:30–21:00; сб,вс 09:00–21:00', 'пн-пт 08:30–21:00; сб,вс 09:00–22:00', 'пн-пт 08:30–21:00; сб,вс 09:30–21:00', 'пн-пт 08:30–21:00; сб,вс 09:30–21:30', 'пн-пт 08:30–21:00; сб,вс 09:45–21:00', 'пн-пт 08:30–21:00; сб,вс 10:00–20:00', 'пн-пт 08:30–21:00; сб,вс 10:00–21:00', 'пн-пт 08:30–21:00; сб,вс 12:00–21:00', 'пн-пт 08:30–21:30; сб,вс 09:00–21:30', 'пн-пт 08:30–21:30; сб,вс 09:00–22:00', 'пн-пт 08:30–21:30; сб,вс 09:30–21:30', 'пн-пт 08:30–21:30; сб,вс 10:00–22:00', 'пн-пт 08:30–22:00; сб 09:00–22:00; вс 10:00–22:00', 'пн-пт 08:30–22:00; сб 12:00–22:00', 'пн-пт 08:30–22:00; сб,вс 09:00–22:00', 'пн-пт 08:30–22:00; сб,вс 09:30–22:00', 'пн-пт 08:30–22:00; сб,вс 10:00–22:00', 'пн-пт 08:30–22:00; сб,вс 11:00–21:30', 'пн-пт 08:30–22:00; сб,вс 11:00–22:00', 'пн-пт 08:30–23:00; сб,вс 09:00–23:00', 'пн-пт 08:30–23:00; сб,вс 11:00–23:00', 'пн-пт 09:00–00:00; сб 10:00–00:00; вс 11:00–00:00', 'пн-пт 09:00–00:00; сб,вс 09:00–02:00', 'пн-пт 09:00–00:00; сб,вс 10:00–00:00', 'пн-пт 09:00–00:00; сб,вс 11:00–00:00', 'пн-пт 09:00–00:30; сб,вс 10:00–00:30', 'пн-пт 09:00–02:00; сб,вс 12:00–02:00', 'пн-пт 09:00–11:00; сб 10:00–12:00', 'пн-пт 09:00–15:00', 'пн-пт 09:00–15:30', 'пн-пт 09:00–16:00', 'пн-пт 09:00–16:30', 'пн-пт 09:00–17:00', 'пн-пт 09:00–17:00, перерыв 11:00–12:00', 'пн-пт 09:00–17:00; сб 09:00–16:00', 'пн-пт 09:00–17:00; сб 09:00–16:30', 'пн-пт 09:00–17:00; сб 12:00–14:00', 'пн-пт 09:00–17:00; сб,вс 12:00–18:00', 'пн-пт 09:00–17:00; сб,вс круглосуточно', 'пн-пт 09:00–17:30', 'пн-пт 09:00–17:45', 'пн-пт 09:00–18:00', 'пн-пт 09:00–18:00; сб 08:00–15:00', 'пн-пт 09:00–18:00; сб 09:00–15:00', 'пн-пт 09:00–18:00; сб 09:00–17:00', 'пн-пт 09:00–18:00; сб,вс 09:00–15:00', 'пн-пт 09:00–18:00; сб,вс 09:00–17:00', 'пн-пт 09:00–18:00; сб,вс 10:00–18:00', 'пн-пт 09:00–18:00; сб,вс 12:00–18:00', 'пн-пт 09:00–18:00; сб,вс 12:00–21:00', 'пн-пт 09:00–18:30', 'пн-пт 09:00–19:00', 'пн-пт 09:00–19:00; сб 09:00–18:00', 'пн-пт 09:00–19:00; сб,вс 10:00–17:00', 'пн-пт 09:00–19:00; сб,вс 10:00–19:00', 'пн-пт 09:00–19:30; сб,вс 10:00–17:00', 'пн-пт 09:00–19:45; сб,вс 10:30–18:00', 'пн-пт 09:00–20:00', 'пн-пт 09:00–20:00; сб 09:00–16:00', 'пн-пт 09:00–20:00; сб 09:00–17:00', 'пн-пт 09:00–20:00; сб 09:00–18:00', 'пн-пт 09:00–20:00; сб 09:00–19:00; вс 09:00–18:00', 'пн-пт 09:00–20:00; сб 12:00–18:00', 'пн-пт 09:00–20:00; сб,вс 08:00–20:00', 'пн-пт 09:00–20:00; сб,вс 09:00–00:00', 'пн-пт 09:00–20:00; сб,вс 09:00–18:00', 'пн-пт 09:00–20:00; сб,вс 09:00–19:00', 'пн-пт 09:00–20:00; сб,вс 10:00–18:00', 'пн-пт 09:00–20:00; сб,вс 10:00–19:00', 'пн-пт 09:00–20:00; сб,вс 10:00–20:00', 'пн-пт 09:00–20:00; сб,вс 11:00–20:00', 'пн-пт 09:00–20:00; сб,вс 12:00–20:00', 'пн-пт 09:00–21:00', 'пн-пт 09:00–21:00; сб 11:00–22:00; вс 12:00–22:00', 'пн-пт 09:00–21:00; сб,вс 09:00–18:00', 'пн-пт 09:00–21:00; сб,вс 09:00–22:00', 'пн-пт 09:00–21:00; сб,вс 10:00–19:00', 'пн-пт 09:00–21:00; сб,вс 10:00–20:00', 'пн-пт 09:00–21:00; сб,вс 10:00–21:00', 'пн-пт 09:00–21:00; сб,вс 10:00–22:00', 'пн-пт 09:00–21:00; сб,вс 11:00–20:00', 'пн-пт 09:00–21:00; сб,вс 11:00–21:00', 'пн-пт 09:00–21:00; сб,вс 12:00–21:00', 'пн-пт 09:00–22:00', 'пн-пт 09:00–22:00; сб 10:00–18:00', 'пн-пт 09:00–22:00; сб 10:00–20:00; вс 10:00–22:00', 'пн-пт 09:00–22:00; сб 10:00–22:00', 'пн-пт 09:00–22:00; сб 10:00–22:00; вс 10:00–21:00', 'пн-пт 09:00–22:00; сб,вс 09:00–21:00', 'пн-пт 09:00–22:00; сб,вс 09:00–23:00', 'пн-пт 09:00–22:00; сб,вс 09:30–22:00', 'пн-пт 09:00–22:00; сб,вс 10:00–00:00', 'пн-пт 09:00–22:00; сб,вс 10:00–21:00', 'пн-пт 09:00–22:00; сб,вс 10:00–22:00', 'пн-пт 09:00–22:00; сб,вс 10:00–23:00', 'пн-пт 09:00–22:00; сб,вс 11:00–22:00', 'пн-пт 09:00–22:00; сб,вс 12:00–22:00', 'пн-пт 09:00–22:30; сб,вс 10:00–22:30', 'пн-пт 09:00–23:00; сб 12:00–23:00; вс 10:00–23:00', 'пн-пт 09:00–23:00; сб,вс 09:00–22:00', 'пн-пт 09:00–23:00; сб,вс 10:00–22:00', 'пн-пт 09:00–23:00; сб,вс 10:00–23:00', 'пн-пт 09:00–23:00; сб,вс 11:00–23:00', 'пн-пт 09:00–23:00; сб,вс 11:30–23:00', 'пн-пт 09:00–23:00; сб,вс 12:00–23:00', 'пн-пт 09:30–00:00; сб,вс 10:00–00:00', 'пн-пт 09:30–15:00', 'пн-пт 09:30–17:30', 'пн-пт 09:30–18:00', 'пн-пт 09:30–19:00; сб,вс 10:00–20:00', 'пн-пт 09:30–19:30', 'пн-пт 09:30–19:30; сб,вс 10:00–18:00', 'пн-пт 09:30–22:00; сб,вс 10:00–22:00', 'пн-пт 09:30–23:00; сб,вс 11:00–23:00', 'пн-пт 10:00–00:00; сб,вс 10:00–02:00', 'пн-пт 10:00–00:00; сб,вс 11:00–00:00', 'пн-пт 10:00–00:00; сб,вс 12:00–00:00', 'пн-пт 10:00–00:00; сб,вс 12:00–02:00', 'пн-пт 10:00–01:00; сб,вс 11:00–01:00', 'пн-пт 10:00–02:00; сб,вс 12:00–02:00', 'пн-пт 10:00–03:00; сб,вс 09:00–03:00', 'пн-пт 10:00–16:00', 'пн-пт 10:00–16:30', 'пн-пт 10:00–17:00', 'пн-пт 10:00–18:00', 'пн-пт 10:00–19:00', 'пн-пт 10:00–19:00; сб,вс 10:00–20:00', 'пн-пт 10:00–19:00; сб,вс 11:00–19:00', 'пн-пт 10:00–19:00; сб,вс 11:00–20:00', 'пн-пт 10:00–20:00', 'пн-пт 10:00–20:00; вс 12:00–17:00', 'пн-пт 10:00–20:00; сб 10:00–18:00', 'пн-пт 10:00–20:00; сб 11:00–19:00', 'пн-пт 10:00–20:00; сб 12:00–20:00', 'пн-пт 10:00–20:00; сб,вс 11:00–18:00', 'пн-пт 10:00–21:00', 'пн-пт 10:00–21:00; сб 11:00–21:00; вс 11:00–20:00', 'пн-пт 10:00–21:00; сб 12:00–21:00', 'пн-пт 10:00–21:00; сб,вс 10:00–20:00', 'пн-пт 10:00–21:00; сб,вс 10:00–22:00', 'пн-пт 10:00–21:00; сб,вс 11:00–20:00', 'пн-пт 10:00–21:00; сб,вс 11:00–21:00', 'пн-пт 10:00–21:00; сб,вс 12:00–21:00', 'пн-пт 10:00–21:30; сб,вс 11:00–21:00', 'пн-пт 10:00–21:30; сб,вс 11:00–22:00', 'пн-пт 10:00–21:30; сб,вс 11:00–23:00', 'пн-пт 10:00–22:00', 'пн-пт 10:00–22:00; сб,вс 09:00–22:00', 'пн-пт 10:00–22:00; сб,вс 09:00–23:00', 'пн-пт 10:00–22:00; сб,вс 10:00–00:00', 'пн-пт 10:00–22:00; сб,вс 10:00–18:00', 'пн-пт 10:00–22:00; сб,вс 10:00–20:00', 'пн-пт 10:00–22:00; сб,вс 10:00–21:00', 'пн-пт 10:00–22:00; сб,вс 10:00–23:00', 'пн-пт 10:00–22:00; сб,вс 11:00–22:00', 'пн-пт 10:00–22:00; сб,вс 11:00–23:00', 'пн-пт 10:00–22:00; сб,вс 12:00–22:00', 'пн-пт 10:00–22:00; сб,вс 12:00–23:00', 'пн-пт 10:00–22:00; сб,вс 13:00–21:00', 'пн-пт 10:00–22:00; сб,вс 14:00–23:00', 'пн-пт 10:00–22:30; сб,вс 10:00–00:30', 'пн-пт 10:00–23:00', 'пн-пт 10:00–23:00; сб,вс 10:00–02:00', 'пн-пт 10:00–23:00; сб,вс 11:00–00:00', 'пн-пт 10:00–23:00; сб,вс 11:00–23:00', 'пн-пт 10:00–23:00; сб,вс 12:00–22:00', 'пн-пт 10:00–23:00; сб,вс 12:00–23:00', 'пн-пт 10:10–23:00; сб,вс 10:00–23:00', 'пн-пт 10:30–21:30; сб,вс 10:30–22:30', 'пн-пт 11:00–00:00; сб,вс 10:00–00:00', 'пн-пт 11:00–00:00; сб,вс 11:00–02:00', 'пн-пт 11:00–00:00; сб,вс 11:00–06:00', 'пн-пт 11:00–00:00; сб,вс 11:30–00:00', 'пн-пт 11:00–00:00; сб,вс 12:00–00:00', 'пн-пт 11:00–02:00; сб,вс 10:00–04:00', 'пн-пт 11:00–02:00; сб,вс 11:00–00:00', 'пн-пт 11:00–02:30; сб,вс 12:00–02:30', 'пн-пт 11:00–03:00; сб,вс 11:00–06:00', 'пн-пт 11:00–05:00; сб,вс 12:00–03:00', 'пн-пт 11:00–05:00; сб,вс 12:00–05:00', 'пн-пт 11:00–06:00; сб 18:00–06:00; вс 20:00–06:00', 'пн-пт 11:00–15:00', 'пн-пт 11:00–16:00', 'пн-пт 11:00–17:00', 'пн-пт 11:00–18:00', 'пн-пт 11:00–19:00', 'пн-пт 11:00–19:00; сб 11:00–20:00; вс 13:00–20:00', 'пн-пт 11:00–19:00; сб,вс 10:00–20:00', 'пн-пт 11:00–19:00; сб,вс 11:00–20:00', 'пн-пт 11:00–20:00', 'пн-пт 11:00–20:00; сб,вс 10:00–20:00', 'пн-пт 11:00–21:00; сб 11:00–20:00', 'пн-пт 11:00–21:00; сб,вс 10:00–22:00', 'пн-пт 11:00–21:00; сб,вс 11:00–19:00', 'пн-пт 11:00–21:00; сб,вс 11:00–22:00', 'пн-пт 11:00–21:00; сб,вс 11:30–19:00', 'пн-пт 11:00–21:00; сб,вс 12:00–21:00', 'пн-пт 11:00–22:00', 'пн-пт 11:00–22:00; сб,вс 10:00–22:00', 'пн-пт 11:00–22:00; сб,вс 10:00–23:00', 'пн-пт 11:00–22:00; сб,вс 11:00–23:00', 'пн-пт 11:00–22:00; сб,вс 12:00–22:00', 'пн-пт 11:00–22:15; сб,вс 11:00–23:00', 'пн-пт 11:00–22:30; сб,вс 12:00–22:00', 'пн-пт 11:00–22:45; сб,вс 12:00–22:45', 'пн-пт 11:00–22:45; сб,вс 12:00–23:45', 'пн-пт 11:00–23:00', 'пн-пт 11:00–23:00; сб 12:00–00:00; вс 12:00–23:00', 'пн-пт 11:00–23:00; сб 12:00–23:00', 'пн-пт 11:00–23:00; сб,вс 09:00–23:00', 'пн-пт 11:00–23:00; сб,вс 10:00–23:00', 'пн-пт 11:00–23:00; сб,вс 11:00–00:00', 'пн-пт 11:00–23:00; сб,вс 11:00–02:00', 'пн-пт 11:00–23:00; сб,вс 11:00–23:30', 'пн-пт 11:00–23:00; сб,вс 12:00–00:00', 'пн-пт 11:00–23:00; сб,вс 12:00–03:00', 'пн-пт 11:00–23:00; сб,вс 12:00–22:00', 'пн-пт 11:00–23:00; сб,вс 12:00–23:00', 'пн-пт 11:00–23:00; сб,вс 13:00–23:00', 'пн-пт 11:00–23:00; сб,вс 16:00–23:00', 'пн-пт 11:00–23:15; сб,вс 10:30–23:15', 'пн-пт 11:00–23:30; сб,вс 13:00–23:30', 'пн-пт 11:30–14:30', 'пн-пт 11:30–15:30', 'пн-пт 11:30–16:00', 'пн-пт 11:30–17:00', 'пн-пт 11:30–19:00', 'пн-пт 11:30–21:00', 'пн-пт 11:30–22:00', 'пн-пт 11:30–22:00; сб,вс 11:00–23:00', 'пн-пт 11:30–22:00; сб,вс 12:00–20:00', 'пн-пт 11:30–23:00; сб,вс 11:30–23:30', 'пн-пт 11:30–23:00; сб,вс 12:00–23:00', 'пн-пт 12:00–00:00', 'пн-пт 12:00–00:00; сб 14:00–00:00', 'пн-пт 12:00–00:00; сб,вс 10:00–00:00', 'пн-пт 12:00–00:00; сб,вс 11:00–00:00', 'пн-пт 12:00–00:00; сб,вс 12:00–01:00', 'пн-пт 12:00–00:00; сб,вс 12:00–02:00', 'пн-пт 12:00–00:00; сб,вс 12:00–03:00', 'пн-пт 12:00–00:00; сб,вс 12:00–06:00', 'пн-пт 12:00–00:00; сб,вс 13:00–00:00', 'пн-пт 12:00–00:00; сб,вс 13:00–02:00', 'пн-пт 12:00–00:00; сб,вс 15:00–00:00', 'пн-пт 12:00–01:00', 'пн-пт 12:00–01:00; сб 16:00–01:00', 'пн-пт 12:00–02:00; сб,вс 10:00–02:00', 'пн-пт 12:00–05:00; сб 18:00–05:00', 'пн-пт 12:00–06:00; сб,вс 16:00–06:00', 'пн-пт 12:00–16:00', 'пн-пт 12:00–16:30', 'пн-пт 12:00–17:00', 'пн-пт 12:00–20:00', 'пн-пт 12:00–20:00; сб,вс 12:00–22:00', 'пн-пт 12:00–21:00; сб 15:00–22:00', 'пн-пт 12:00–21:00; сб,вс 12:00–22:00', 'пн-пт 12:00–22:00', 'пн-пт 12:00–22:00; сб,вс 12:00–23:00', 'пн-пт 12:00–22:30; сб,вс 12:00–23:30', 'пн-пт 12:00–23:00; сб,вс 10:00–23:00', 'пн-пт 12:00–23:00; сб,вс 11:00–23:00', 'пн-пт 13:00–00:00; сб,вс 14:00–00:00', 'пн-пт 13:00–04:00; сб,вс 13:00–05:00', 'пн-пт 13:00–15:00', 'пн-пт 13:00–15:30', 'пн-пт 14:00–00:00; сб,вс 15:00–01:00', 'пн-пт 14:00–02:00; сб,вс 14:00–03:00', 'пн-пт 14:00–03:00; сб,вс 12:00–03:00', 'пн-пт 14:00–23:00; сб,вс 12:00–23:00', 'пн-пт 15:00–01:00; сб,вс 13:00–23:00', 'пн-пт 16:00–00:00; сб,вс 16:00–08:00', 'пн-пт 17:00–00:00; сб,вс 12:00–00:00', 'пн-пт 17:00–03:00; сб,вс 17:00–05:00', 'пн-пт 17:00–23:00; сб,вс 12:00–23:00', 'пн-пт круглосуточно; сб 09:00–22:00; вс круглосуточно', 'пн-пт круглосуточно; сб,вс 00:00–01:00', 'пн-сб 07:00–05:00; вс 07:00–04:00', 'пн-сб 07:00–19:00', 'пн-сб 07:00–20:00; вс 09:00–19:00', 'пн-сб 07:00–21:00', 'пн-сб 07:00–21:00; вс 08:00–20:00', 'пн-сб 07:00–22:00; вс 08:00–22:00', 'пн-сб 07:00–23:00; вс 08:00–23:00', 'пн-сб 07:00–23:00; вс 09:00–23:00', 'пн-сб 07:30–20:00; вс 09:00–20:00', 'пн-сб 07:30–20:30; вс 10:00–20:00', 'пн-сб 08:00–19:00', 'пн-сб 08:00–20:00', 'пн-сб 08:00–20:00; вс 08:00–18:00', 'пн-сб 08:00–20:00; вс 09:00–20:00', 'пн-сб 08:00–21:00', 'пн-сб 08:00–21:00; вс 08:00–20:30', 'пн-сб 08:00–21:00; вс 09:00–20:00', 'пн-сб 08:00–22:00', 'пн-сб 08:00–22:00; вс 08:00–21:00', 'пн-сб 08:00–22:00; вс 09:00–21:00', 'пн-сб 08:00–22:00; вс 09:00–22:00', 'пн-сб 08:00–23:00; вс 09:00–22:00', 'пн-сб 08:00–23:00; вс 09:00–23:00', 'пн-сб 08:30–18:30', 'пн-сб 08:30–19:30; вс 09:30–18:30', 'пн-сб 08:30–20:00; вс 09:00–19:00', 'пн-сб 08:30–21:30; вс 09:30–21:00', 'пн-сб 09:00–16:00', 'пн-сб 09:00–19:00', 'пн-сб 09:00–20:00', 'пн-сб 09:00–20:00; вс 09:00–18:00', 'пн-сб 09:00–21:00', 'пн-сб 09:00–21:00; вс 09:00–20:00', 'пн-сб 09:00–21:00; вс 10:00–20:00', 'пн-сб 09:00–22:00; вс 09:00–21:00', 'пн-сб 09:00–22:00; вс 10:00–22:00', 'пн-сб 09:00–23:00; вс 10:00–22:00', 'пн-сб 09:00–23:00; вс 10:00–23:00', 'пн-сб 09:00–23:00; вс 12:00–23:00', 'пн-сб 09:30–20:30', 'пн-сб 10:00–00:00; вс 11:00–01:00', 'пн-сб 10:00–00:00; вс 11:00–22:00', 'пн-сб 10:00–00:00; вс 11:00–23:00', 'пн-сб 10:00–00:00; вс 13:00–00:00', 'пн-сб 10:00–18:00', 'пн-сб 10:00–19:00', 'пн-сб 10:00–20:00', 'пн-сб 10:00–20:00; вс 10:00–19:00', 'пн-сб 10:00–20:30; вс 10:00–19:30', 'пн-сб 10:00–21:00', 'пн-сб 10:00–21:00; вс 08:00–21:00', 'пн-сб 10:00–22:00', 'пн-сб 10:00–22:00; вс 10:00–18:00', 'пн-сб 10:00–22:00; вс 10:00–21:00', 'пн-сб 10:00–22:00; вс 11:00–20:00', 'пн-сб 10:00–22:00; вс 11:00–21:00', 'пн-сб 10:00–22:00; вс 11:00–22:00', 'пн-сб 10:00–22:00; вс 12:00–22:00', 'пн-сб 10:00–23:00', 'пн-сб 10:00–23:00; вс 10:00–22:00', 'пн-сб 10:00–23:00; вс 11:00–23:00', 'пн-сб 10:00–23:00; вс 12:00–23:00', 'пн-сб 10:30–21:00', 'пн-сб 10:30–21:30', 'пн-сб 11:00–02:00; вс 12:00–02:00', 'пн-сб 11:00–22:00', 'пн-сб 11:00–22:00; вс 12:00–22:00', 'пн-сб 11:00–22:00; вс 13:00–22:00', 'пн-сб 11:00–23:00', 'пн-сб 11:00–23:00; вс 12:00–22:00', 'пн-сб 11:00–23:00; вс 12:00–23:00', 'пн-сб 11:00–23:30; вс 12:00–23:30', 'пн-сб 11:30–00:00; вс 12:00–23:30', 'пн-сб 12:00–02:00; вс 13:00–02:00', 'пн-сб 12:00–22:00', 'пн-сб 12:00–23:00; вс 13:00–23:00', 'пн-сб 12:00–23:30; вс 13:00–23:30', 'пн-сб 19:00–06:00', 'пн-ср 07:00–21:00; чт 09:00–21:00; пт 07:00–21:00; сб,вс 09:00–21:00', 'пн-ср 07:00–23:00; чт 07:00–00:00; пт,сб круглосуточно; вс 00:00–23:00', 'пн-ср 08:00–00:00; чт,пт 08:00–05:00; сб 11:00–05:00; вс 11:00–00:00', 'пн-ср 08:00–00:00; чт-сб 08:00–02:00; вс 08:00–00:00', 'пн-ср 08:00–00:00; чт-сб 08:00–03:00; вс 08:00–00:00', 'пн-ср 08:00–00:00; чт-сб круглосуточно; вс 08:00–00:00', 'пн-ср 08:00–18:30', 'пн-ср 08:00–22:00; чт 08:00–23:00; пт,сб круглосуточно; вс 00:00–22:00', 'пн-ср 08:00–23:00; чт 08:00–00:00; пт,сб круглосуточно; вс 00:00–23:00', 'пн-ср 08:00–23:00; чт-сб 08:00–00:00; вс 08:00–23:00', 'пн-ср 09:00–00:00; чт,пт 09:00–01:00; сб 10:00–01:00; вс 10:00–00:00', 'пн-ср 09:00–00:00; чт-вс круглосуточно', 'пн-ср 09:00–00:00; чт-сб 09:00–01:00; вс 09:00–00:00', 'пн-ср 09:00–00:00; чт-сб 09:00–02:00; вс 09:00–00:00', 'пн-ср 09:00–21:00; чт 09:00–19:00; пт 10:00–21:00; сб,вс 09:00–21:00', 'пн-ср 09:00–21:00; чт,пт 09:00–23:00', 'пн-ср 09:00–21:00; чт-сб 09:00–23:00; вс 09:00–21:00', 'пн-ср 10:00–00:00; чт,пт 11:00–00:00; сб 11:00–02:00; вс 11:00–23:00', 'пн-ср 10:00–00:00; чт-сб 10:00–06:00; вс 10:00–00:00', 'пн-ср 10:00–01:00; чт-сб 10:00–03:00; вс 10:00–01:00', 'пн-ср 10:00–21:30; чт-сб 11:00–22:30; вс 10:00–21:30', 'пн-ср 10:00–22:00; чт,пт 10:00–23:00; сб 11:00–23:00; вс 11:00–22:00', 'пн-ср 10:00–22:00; чт-сб 10:00–23:00; вс 10:00–22:00', 'пн-ср 10:00–22:00; чт-сб 11:00–23:00; вс 10:00–22:00', 'пн-ср 10:00–23:00; чт-сб 10:00–00:00; вс 10:00–23:00', 'пн-ср 10:30–21:30; чт-сб 11:00–23:00; вс 10:30–21:30', 'пн-ср 10:30–22:30; чт 11:00–00:00; пт,сб 10:30–01:00; вс 10:30–22:30', 'пн-ср 11:00–00:00; чт 11:00–04:00; пт,сб 11:00–06:00; вс 11:00–00:00', 'пн-ср 11:00–00:00; чт-вс 11:00–02:00', 'пн-ср 11:00–00:00; чт-сб 11:00–06:00; вс 11:00–00:00', 'пн-ср 11:00–22:00; чт-сб 11:00–23:00; вс 11:00–22:00', 'пн-ср 11:00–23:00; чт 11:00–00:00; пт,сб 11:00–05:00; вс 11:00–23:00', 'пн-ср 11:00–23:00; чт-сб 11:00–00:00; вс 11:00–23:00', 'пн-ср 11:00–23:00; чт-сб 11:00–05:00; вс 11:00–23:00', 'пн-ср 12:00–00:00; чт 12:00–03:00; пт 11:00–00:00; сб,вс 00:00–12:00', 'пн-ср 12:00–00:00; чт,пт 12:00–02:00; сб 10:00–02:00', 'пн-ср 12:00–00:00; чт,пт 12:00–06:00; сб,вс 18:00–06:00', 'пн-ср 12:00–00:00; чт-вс 12:00–06:00', 'пн-ср 12:00–00:00; чт-сб 12:00–01:00; вс 12:00–00:00', 'пн-ср 12:00–00:00; чт-сб 12:00–02:00; вс 12:00–00:00', 'пн-ср 12:00–00:00; чт-сб 12:00–06:00; вс 12:00–00:00', 'пн-ср 12:00–03:00; чт-сб 12:00–06:00; вс 12:00–03:00', 'пн-ср 12:00–21:00; чт,пт 12:00–23:00', 'пн-ср 12:00–22:00; чт-сб 12:00–00:00; вс 12:00–22:00', 'пн-ср 12:00–23:00; чт 12:00–00:00; пт,сб 12:00–01:00; вс 12:00–00:00', 'пн-ср 12:00–23:00; чт-сб 12:00–00:00; вс 12:00–23:00', 'пн-ср 15:00–00:00; чт-сб 15:00–05:00; вс 13:00–05:00', 'пн-ср 18:00–06:00; чт-вс 13:00–06:00', 'пн-чт 07:00–00:00; пт,сб круглосуточно; вс 07:00–00:00', 'пн-чт 07:00–02:00; пт,сб 07:00–05:00; вс 07:00–02:00', 'пн-чт 07:00–21:00; пт,сб 07:00–23:00; вс 07:00–21:00', 'пн-чт 07:00–22:00; пт 07:00–23:00; сб 08:00–23:00; вс 08:00–22:00', 'пн-чт 07:00–22:00; пт 07:00–23:00; сб 10:00–23:00; вс 10:00–22:00', 'пн-чт 07:00–22:00; пт 07:00–23:00; сб,вс 08:00–23:00', 'пн-чт 07:00–22:00; пт,сб круглосуточно; вс 00:00–22:00', 'пн-чт 07:00–23:00; пт 07:00–00:00; сб 00:00–23:00; вс 07:00–23:00', 'пн-чт 07:00–23:00; пт 07:00–00:00; сб 08:00–23:00; вс 09:00–23:00', 'пн-чт 07:00–23:00; пт 07:00–00:00; сб круглосуточно; вс 00:00–23:00', 'пн-чт 07:00–23:00; пт,сб 07:00–00:00; вс 09:00–23:00', 'пн-чт 07:00–23:00; пт,сб 08:00–01:00; вс 08:00–23:00', 'пн-чт 07:00–23:00; пт,сб круглосуточно; вс 08:00–23:00', 'пн-чт 07:00–23:00; пт-вс 07:00–00:00', 'пн-чт 07:30–19:00; пт 07:30–18:00', 'пн-чт 07:30–20:00; пт 07:30–19:00', 'пн-чт 07:30–22:00; пт 07:30–23:00; сб,вс 07:30–22:00', 'пн-чт 07:30–23:00; пт 07:30–00:00; сб круглосуточно; вс 00:00–23:00', 'пн-чт 08:00–00:00; пт 08:00–02:00; сб 10:00–02:00; вс 10:00–00:00', 'пн-чт 08:00–00:00; пт 08:00–03:00; сб 10:00–03:00; вс 10:00–00:00', 'пн-чт 08:00–00:00; пт 08:00–06:00; сб 10:00–03:00; вс 10:00–00:00', 'пн-чт 08:00–00:00; пт,сб 08:00–02:00; вс 08:00–00:00', 'пн-чт 08:00–00:00; пт,сб 08:00–06:00; вс 08:00–00:00', 'пн-чт 08:00–00:00; пт,сб круглосуточно; вс 08:00–00:00', 'пн-чт 08:00–00:00; пт-вс 10:00–02:00', 'пн-чт 08:00–17:00; пт 08:00–16:00', 'пн-чт 08:00–18:00; пт 08:00–17:00', 'пн-чт 08:00–18:00; пт 08:00–17:00; сб 10:00–17:00', 'пн-чт 08:00–19:00; пт 08:00–17:00', 'пн-чт 08:00–19:00; пт 08:00–18:00', ...]
data['is_24/7'] = (data['hours']=='ежедневно, круглосуточно')
data.tail(10)
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | street | is_24/7 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 8396 | пекинскийдвор | ресторан | Москва, Ленинский проспект, 158 | Западный административный округ | ежедневно, 11:00–23:00 | 55.651706 | 37.482667 | 4.3 | выше среднего | Средний счёт:1000–1500 ₽ | 1250.0 | NaN | 0 | 200.0 | Ленинский проспект | False |
| 8397 | траекториякрафт-кафе | пиццерия | Москва, улица Лобачевского, 52, корп. 1 | Западный административный округ | пн-пт 10:00–23:00; сб,вс 12:00–23:00 | 55.672011 | 37.492628 | 4.4 | средние | NaN | NaN | NaN | 0 | 60.0 | улица Лобачевского | False |
| 8398 | наволгина | кафе | Москва, улица Академика Волгина, 2А | Юго-Западный административный округ | ежедневно, 09:00–23:00 | 55.654933 | 37.521421 | 4.4 | NaN | NaN | NaN | NaN | 0 | 49.0 | улица Академика Волгина | False |
| 8399 | пекарня,кафе-гриль | булочная | Москва, Болотниковская улица, 52, корп. 2 | Юго-Западный административный округ | ежедневно, круглосуточно | 55.662866 | 37.582572 | 4.2 | NaN | Средний счёт:50–250 ₽ | 150.0 | NaN | 0 | 50.0 | Болотниковская улица | True |
| 8400 | практикакофе | кофейня | Москва, Чонгарский бульвар, 26А, корп. 1 | Юго-Западный административный округ | пн-пт 08:00–22:00; сб,вс 09:00–22:00 | 55.654289 | 37.600722 | 4.4 | NaN | NaN | NaN | NaN | 1 | 55.0 | Чонгарский бульвар | False |
| 8401 | сушимания | кафе | Москва, Профсоюзная улица, 56 | Юго-Западный административный округ | ежедневно, 09:00–02:00 | 55.670021 | 37.552480 | 4.4 | NaN | NaN | NaN | NaN | 0 | 86.0 | Профсоюзная улица | False |
| 8402 | миславнес | кафе | Москва, Пролетарский проспект, 19, корп. 1 | Южный административный округ | ежедневно, 08:00–22:00 | 55.640875 | 37.656553 | 4.8 | NaN | NaN | NaN | NaN | 0 | 150.0 | Пролетарский проспект | False |
| 8403 | самовар | кафе | Москва, Люблинская улица, 112А, стр. 1 | Юго-Восточный административный округ | ежедневно, круглосуточно | 55.648859 | 37.743219 | 3.9 | NaN | Средний счёт:от 150 ₽ | 150.0 | NaN | 0 | 150.0 | Люблинская улица | True |
| 8404 | чайханаsabr | кафе | Москва, Люблинская улица, 112А, стр. 1 | Юго-Восточный административный округ | ежедневно, круглосуточно | 55.648849 | 37.743222 | 4.2 | NaN | NaN | NaN | NaN | 1 | 150.0 | Люблинская улица | True |
| 8405 | kebabtime | кафе | Москва, Россошанский проезд, 6 | Южный административный округ | ежедневно, круглосуточно | 55.598229 | 37.604702 | 3.9 | NaN | NaN | NaN | NaN | 0 | 12.0 | Россошанский проезд | True |
В ходе предобработки обнаружено значительное количество пропусков в данных по средним цене заказа, счету, цене чашки кофе и ценовой категории - в каждом из столбцов более половины строк пусты. Удаление такого количества данных не представляется возможным. Информация о количестве мест отсутствуют в почти 43% строк и 6.37% данных потеряно в столбце с часами работы заведений. Для дальнейшего анализа пропуски из данных не удалялись, .
Заведения в датасете не дублировались, но в ходе подготовки данных были исправлены ошибки в наименованиях и признак сетевого заведения. В результате количество сетевых заведенй возросло с 3205 до 3682.
Созданы столбцы с указанием улицы из адреса и признака круглосуточной работы заведения.
</div>
#для px
colors = ['#2E2881','#ffffff','#EBBC2C']
cmap = LinearSegmentedColormap.from_list('my_pal', colors)
ccscale=[(0,'#ffffff'), (1,'#2E2881')]
ccscale2=[(0,'#EBBC2C'), (0.3,'#E8E8E8'), (1,'#2E2881')]
#для sns
sns.set_style('whitegrid')
my_sns_pal = sns.color_palette('blend:#2E2881,#ffffff,#EBBC2C', n_colors=8)
my_sns_pal_c = sns.color_palette('blend:#ffffff,#2E2881', as_cmap=True)
sns.set_palette(my_sns_pal)
my_sns_pal
#для go
pio.templates['my_go_pal'] = go.layout.Template(layout=go.Layout(colorway=['#F9E18B', '#6F5ABA']))
pio.templates.default = 'my_go_pal'
pal_colors=['#6F5ABA', '#82A4D3', '#F9E18B', '#F29F1D', '#5B55DC', '#1D1456', '#7BA6EF','#FCF97A', '#2F294A', '#BCB3DA', '#F2D100', '#89376D', '#362641', '#E3CB51']
#рассчитаем данные
data_category = data.groupby('category').agg({'name':'count'})
data_category.columns = ['Количество']
data_category=data_category.sort_values('Количество', ascending=False)
data_category
| Количество | |
|---|---|
| category | |
| кафе | 2378 |
| ресторан | 2043 |
| кофейня | 1413 |
| бар,паб | 765 |
| пиццерия | 633 |
| быстрое питание | 603 |
| столовая | 315 |
| булочная | 256 |
#визуализируем количество заведений в разрезе категорий
fig=px.bar(data_category, x=data_category.index, y=data_category['Количество'],
color=data_category.index, color_discrete_sequence=pal_colors)
fig.update_layout(title_text='Распределение заведений общественного питания Москвы по категориям',
xaxis_title_text='Категории заведений')
fig.update_layout(font=dict(size=14), showlegend=False)
fig.show()
#визуализируем разброс значений
plt.figure(figsize=(15,10))
ranks = data.groupby('category')['seats'].median().fillna(0).sort_values()[::-1].index
sns.boxplot(x='category', y='seats', data=data, order = ranks)
plt.title('Количество мест в заведениях общественного питания', fontsize=20)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.xlabel('Категория заведения', fontsize=16)
plt.ylabel('Количество мест', fontsize=16)
plt.show();
#укрупним диаграмму по границам нормальных значений
plt.figure(figsize=(15,10))
ranks = data.groupby('category')['seats'].median().fillna(0).sort_values()[::-1].index
sns.boxplot(x='category', y='seats', data=data, order = ranks)
plt.title('Количество мест в заведениях общественного питания', fontsize=20)
plt.ylim(bottom=0, top=350)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.xlabel('Категория заведения', fontsize=16)
plt.ylabel('Количество мест', fontsize=16)
plt.show();
#оценим характеристики распределений
data.pivot_table(index='category', values='seats', aggfunc='describe')
| 25% | 50% | 75% | count | max | mean | min | std | |
|---|---|---|---|---|---|---|---|---|
| category | ||||||||
| бар,паб | 48.00 | 82.5 | 150.0 | 468.0 | 1288.0 | 124.532051 | 0.0 | 145.011574 |
| булочная | 25.00 | 50.0 | 120.0 | 148.0 | 625.0 | 89.385135 | 0.0 | 97.685844 |
| быстрое питание | 28.00 | 65.0 | 140.0 | 349.0 | 1040.0 | 98.891117 | 0.0 | 106.611739 |
| кафе | 35.25 | 60.0 | 120.0 | 1218.0 | 1288.0 | 97.512315 | 0.0 | 117.985084 |
| кофейня | 40.00 | 80.0 | 144.0 | 751.0 | 1288.0 | 111.199734 | 0.0 | 127.837772 |
| пиццерия | 30.00 | 55.0 | 120.0 | 427.0 | 1288.0 | 94.496487 | 0.0 | 112.282703 |
| ресторан | 48.00 | 86.0 | 150.0 | 1270.0 | 1288.0 | 121.944094 | 0.0 | 123.757335 |
| столовая | 40.00 | 75.5 | 117.0 | 164.0 | 1200.0 | 99.750000 | 0.0 | 122.951453 |
#рассчитаем значения для визуализации
data_chain=data.groupby('chain').agg({'name':'count'})
data_chain.columns=['count']
data_chain['labels']=['несетевыe','сетевыe']
data_chain
| count | labels | |
|---|---|---|
| chain | ||
| 0 | 5029 | несетевыe |
| 1 | 3377 | сетевыe |
#для двух категорий подойтет круговая диаграмма
fig, ax = plt.subplots()
ax.pie(data_chain['count'], labels=data_chain['labels'], autopct='%1.1f%%', colors=['#F9E18B', '#6F5ABA'])
plt.title('Соотношение сетевых и несетевых заведений общественного питания', fontsize=14)
plt.show();
#группируем данные для визуализации
data_chain_cat=data.pivot_table(index='category', columns='chain', values='name', aggfunc='count')
data_chain_cat.columns=['несетевые', 'сетевые']
data_chain_cat['total']=data_chain_cat.sum(axis=1)
data_chain_cat['несетевые']=(100*data_chain_cat['несетевые']/data_chain_cat['total']).round(2)
data_chain_cat['сетевые']=(100*data_chain_cat['сетевые']/data_chain_cat['total']).round(2)
del data_chain_cat['total']
data_chain_cat=data_chain_cat.sort_values('несетевые', ascending=False)
data_chain_cat
| несетевые | сетевые | |
|---|---|---|
| category | ||
| бар,паб | 76.99 | 23.01 |
| столовая | 66.98 | 33.02 |
| кафе | 65.26 | 34.74 |
| ресторан | 62.90 | 37.10 |
| быстрое питание | 57.38 | 42.62 |
| кофейня | 46.92 | 53.08 |
| пиццерия | 46.13 | 53.87 |
| булочная | 35.55 | 64.45 |
#визуализируем данные
fig=px.bar(data_chain_cat, x=data_chain_cat.index, y=data_chain_cat.columns)
fig.update_layout(title_text='Соотношение сетевых и несетевых заведений общественного питания',
xaxis_title_text='Категории заведений',
yaxis_title_text='Доля заведений',
legend_title_text='Признак сети')
fig.show()
#расчитаем количество сетевых заведений общественного питания
chain_lid=data.query('chain==1').pivot_table(index='name', columns='category', values='lat', aggfunc='count')
chain_lid['Количество заведений']=chain_lid.sum(axis=1)
chain_lid=chain_lid.sort_values(by='Количество заведений', ascending=False)[0:15]
chain_lid
| category | бар,паб | булочная | быстрое питание | кафе | кофейня | пиццерия | ресторан | столовая | Количество заведений |
|---|---|---|---|---|---|---|---|---|---|
| name | |||||||||
| шоколадница | NaN | NaN | NaN | 1.0 | 119.0 | NaN | NaN | NaN | 120.0 |
| домино'спицца | NaN | NaN | NaN | NaN | NaN | 77.0 | NaN | NaN | 77.0 |
| додопицца | NaN | NaN | NaN | NaN | NaN | 74.0 | NaN | NaN | 74.0 |
| яндекс.лавка | NaN | NaN | NaN | NaN | NaN | NaN | 72.0 | NaN | 72.0 |
| onepricecoffee | NaN | NaN | NaN | NaN | 72.0 | NaN | NaN | NaN | 72.0 |
| cofix | NaN | NaN | NaN | NaN | 65.0 | NaN | NaN | NaN | 65.0 |
| prime | NaN | NaN | NaN | 1.0 | NaN | NaN | 49.0 | NaN | 50.0 |
| хинкальная | 3.0 | NaN | 6.0 | 19.0 | NaN | NaN | 15.0 | 1.0 | 44.0 |
| кофепорт | NaN | NaN | NaN | NaN | 42.0 | NaN | NaN | NaN | 42.0 |
| кулинарнаялавкабратьевкараваевых | NaN | NaN | NaN | 39.0 | NaN | NaN | NaN | NaN | 39.0 |
| теремок | NaN | NaN | 2.0 | NaN | NaN | NaN | 36.0 | NaN | 38.0 |
| чайхана | NaN | NaN | 2.0 | 26.0 | NaN | NaN | 9.0 | NaN | 37.0 |
| cofefest | NaN | NaN | NaN | 1.0 | 32.0 | NaN | NaN | NaN | 33.0 |
| буханка | NaN | 25.0 | NaN | 1.0 | 6.0 | NaN | NaN | NaN | 32.0 |
| му-му | 1.0 | NaN | 2.0 | 12.0 | 2.0 | 1.0 | 8.0 | 1.0 | 27.0 |
#сгруппируем на одном поле средние и медианные значения рейтинка по категориям и общий
fig = px.bar(chain_lid, x=chain_lid.index, y='Количество заведений',
color='Количество заведений', barmode='group', color_continuous_scale=ccscale2)
fig.update_layout(title_text='Top-15 наиболее популярных сетевых заведений общественного питания',
barmode='stack', xaxis={'categoryorder':'total descending'},
xaxis_title_text='Названия заведений')
fig.show();
</div>
#пересчитаем доли категорий
chain_lid_perc=(chain_lid.div(chain_lid['Количество заведений'], axis=0)*100).round(2)
chain_lid_perc
| category | бар,паб | булочная | быстрое питание | кафе | кофейня | пиццерия | ресторан | столовая | Количество заведений |
|---|---|---|---|---|---|---|---|---|---|
| name | |||||||||
| шоколадница | NaN | NaN | NaN | 0.83 | 99.17 | NaN | NaN | NaN | 100.0 |
| домино'спицца | NaN | NaN | NaN | NaN | NaN | 100.0 | NaN | NaN | 100.0 |
| додопицца | NaN | NaN | NaN | NaN | NaN | 100.0 | NaN | NaN | 100.0 |
| яндекс.лавка | NaN | NaN | NaN | NaN | NaN | NaN | 100.00 | NaN | 100.0 |
| onepricecoffee | NaN | NaN | NaN | NaN | 100.00 | NaN | NaN | NaN | 100.0 |
| cofix | NaN | NaN | NaN | NaN | 100.00 | NaN | NaN | NaN | 100.0 |
| prime | NaN | NaN | NaN | 2.00 | NaN | NaN | 98.00 | NaN | 100.0 |
| хинкальная | 6.82 | NaN | 13.64 | 43.18 | NaN | NaN | 34.09 | 2.27 | 100.0 |
| кофепорт | NaN | NaN | NaN | NaN | 100.00 | NaN | NaN | NaN | 100.0 |
| кулинарнаялавкабратьевкараваевых | NaN | NaN | NaN | 100.00 | NaN | NaN | NaN | NaN | 100.0 |
| теремок | NaN | NaN | 5.26 | NaN | NaN | NaN | 94.74 | NaN | 100.0 |
| чайхана | NaN | NaN | 5.41 | 70.27 | NaN | NaN | 24.32 | NaN | 100.0 |
| cofefest | NaN | NaN | NaN | 3.03 | 96.97 | NaN | NaN | NaN | 100.0 |
| буханка | NaN | 78.12 | NaN | 3.12 | 18.75 | NaN | NaN | NaN | 100.0 |
| му-му | 3.70 | NaN | 7.41 | 44.44 | 7.41 | 3.7 | 29.63 | 3.70 | 100.0 |
#построим столбчатую диаграмму с накоплением
fig=px.bar(chain_lid_perc, x=chain_lid_perc.index, y=chain_lid_perc.columns[0:8],
color_discrete_sequence=pal_colors)
fig.update_layout(title_text='Категории заведений общественного питания наиболее популярных сетей',
xaxis_title_text='Названия заведений',
yaxis_title_text='Доля заведений',
legend_title_text='Категория заведений')
fig.update_xaxes(tickangle=45, automargin=True)
fig.show();
</div>
#рассчитаем средний рейтинг всех заведений
print(f'Средний рейтинг заведений общественного питания в Москве составляет', data['rating'].mean().round(2))
Средний рейтинг заведений общественного питания в Москве составляет 4.23
#рассчитаем средний рейтинг популярных сетей
chain_lid_top=chain_lid.sort_values(by='Количество заведений', ascending=False).head(15).index
data_chain_lid=data.query('name in @chain_lid_top').groupby('name').agg({'rating':('count','mean')}).sort_values(('rating','count'), ascending=False)
data_chain_lid.columns=['Количество заведений','Рейтинг']
data_chain_lid
| Количество заведений | Рейтинг | |
|---|---|---|
| name | ||
| шоколадница | 120 | 4.177500 |
| домино'спицца | 77 | 4.171429 |
| додопицца | 74 | 4.286486 |
| onepricecoffee | 72 | 4.069444 |
| яндекс.лавка | 72 | 3.855556 |
| cofix | 65 | 4.075385 |
| prime | 50 | 4.116000 |
| хинкальная | 44 | 4.322727 |
| кофепорт | 42 | 4.147619 |
| кулинарнаялавкабратьевкараваевых | 39 | 4.394872 |
| теремок | 38 | 4.123684 |
| чайхана | 37 | 3.924324 |
| cofefest | 33 | 3.984848 |
| буханка | 32 | 4.396875 |
| му-му | 27 | 4.229630 |
#визуализируем рейтинг наиболее популярных сетей
fig = px.scatter(data_chain_lid, x=data_chain_lid.index, y='Рейтинг',
color='Количество заведений', color_continuous_scale=ccscale2)
fig.update_layout(title_text='Оценки лидеров рейтинга сетевых заведений общественного питания',
xaxis_title_text='Названия заведений')
fig.update_traces(marker_size=10*data_chain_lid['Рейтинг'])
fig.update_xaxes(tickangle=45, automargin=True)
fig.show()
#рассчитаем данные для визуализации
data_district=data.pivot_table(index='district', columns='category', values='name', aggfunc=('count'))
data_district['total']=data_district.sum(axis=1)
data_district['Административный округ']=data['district'].sort_values().unique()
data_district['Административный округ']=data_district['Административный округ'].str.replace(' административный округ','')
data_district
| category | бар,паб | булочная | быстрое питание | кафе | кофейня | пиццерия | ресторан | столовая | total | Административный округ |
|---|---|---|---|---|---|---|---|---|---|---|
| district | ||||||||||
| Восточный административный округ | 53 | 25 | 71 | 272 | 105 | 72 | 160 | 40 | 798 | Восточный |
| Западный административный округ | 50 | 37 | 62 | 239 | 150 | 71 | 218 | 24 | 851 | Западный |
| Северный административный округ | 68 | 39 | 58 | 235 | 193 | 77 | 189 | 41 | 900 | Северный |
| Северо-Восточный административный округ | 63 | 28 | 82 | 269 | 159 | 68 | 182 | 40 | 891 | Северо-Восточный |
| Северо-Западный административный округ | 23 | 12 | 30 | 115 | 62 | 40 | 109 | 18 | 409 | Северо-Западный |
| Центральный административный округ | 364 | 50 | 87 | 464 | 428 | 113 | 670 | 66 | 2242 | Центральный |
| Юго-Восточный административный округ | 38 | 13 | 67 | 282 | 89 | 55 | 145 | 25 | 714 | Юго-Восточный |
| Юго-Западный административный округ | 38 | 27 | 61 | 238 | 96 | 64 | 168 | 17 | 709 | Юго-Западный |
| Южный административный округ | 68 | 25 | 85 | 264 | 131 | 73 | 202 | 44 | 892 | Южный |
#построим столбчатую диаграмму с накоплением
fig=px.bar(data_district, x='Административный округ', y=data_district.columns[0:8],
color_discrete_sequence=pal_colors)
fig.update_layout(title_text='Расположение заведений общественного питания Москвы по округам',
xaxis_title_text='Административный округ',
yaxis_title_text='Количество заведений',
legend_title_text='Категория заведений',
xaxis = {"categoryorder":"total descending"})
fig.update_xaxes(tickangle=45, automargin=True)
fig.show();
#рассчитаем средние и медианные значения рейтинга по категориям и общий
chain_rating_cat=data.pivot_table(index='category', values='rating', aggfunc=('mean','median','count'))
chain_rating_cat.columns=['Количество заведений', 'Средний рейтинг категории', 'Медиана рейтинга категории']
chain_rating_cat['Средний рейтинг']=data['rating'].mean()
chain_rating_cat['Медиана рейтинга']=data['rating'].median()
chain_rating_cat=chain_rating_cat.sort_values('Средний рейтинг категории', ascending=False)
chain_rating_cat
| Количество заведений | Средний рейтинг категории | Медиана рейтинга категории | Средний рейтинг | Медиана рейтинга | |
|---|---|---|---|---|---|
| category | |||||
| бар,паб | 765 | 4.387712 | 4.4 | 4.229895 | 4.3 |
| пиццерия | 633 | 4.301264 | 4.3 | 4.229895 | 4.3 |
| ресторан | 2043 | 4.290357 | 4.3 | 4.229895 | 4.3 |
| кофейня | 1413 | 4.277282 | 4.3 | 4.229895 | 4.3 |
| булочная | 256 | 4.268359 | 4.3 | 4.229895 | 4.3 |
| столовая | 315 | 4.211429 | 4.3 | 4.229895 | 4.3 |
| кафе | 2378 | 4.123886 | 4.2 | 4.229895 | 4.3 |
| быстрое питание | 603 | 4.050249 | 4.2 | 4.229895 | 4.3 |
#сгруппируем на одном поле средние и медианные значения рейтинга по категориям и общий
fig = go.Figure()
fig.add_trace(go.Bar(x=chain_rating_cat.index, y=chain_rating_cat['Средний рейтинг категории'], name='Средний рейтинг категории'))
fig.add_trace(go.Bar(x=chain_rating_cat.index, y=chain_rating_cat['Медиана рейтинга категории'], name='Медиана рейтинга категории'))
fig.add_trace(go.Scatter(x=chain_rating_cat.index, y=chain_rating_cat['Средний рейтинг'], mode='lines+markers', marker_size=15, name='Средний рейтинг'))
fig.add_trace(go.Scatter(x=chain_rating_cat.index, y=chain_rating_cat['Медиана рейтинга'], mode='lines+markers', marker_size=15, name='Медиана рейтинга'))
fig.update_layout(title_text='Рейтинг заведений общественного питания различных категорий',
barmode='group',
xaxis_title_text='Категория заведений',
yaxis_title_text='Рейтинг',
yaxis_range=[4.0,4.5])
fig.show();
Наиболее высокий рейтинг в среднем у баров и пабов - 4.38. Пиццерии,рестораны, кофейни и булочные оцениваются в среднем от 4.26 до 4.3. Столовые получают в среднем оценку 4.21. Наиболее критичны пользователи к заведениям быстрого питания, которые оцениваются в среднем в 4.05, и кафе - со средним рейтингом 4.12. Различие между лидером и замыкающим в среднем рейтинге составляет 0.33 балла рейтинговой оценки.
</div>
#рассчитаем рейтинг заведений по округам
data_rating_dis=data.pivot_table(index='district', values='rating', aggfunc='mean')
data_rating_dis.columns=['rating']
data_rating_dis['district']=data['district'].sort_values().unique()
data_rating_dis
| rating | district | |
|---|---|---|
| district | ||
| Восточный административный округ | 4.174185 | Восточный административный округ |
| Западный административный округ | 4.181551 | Западный административный округ |
| Северный административный округ | 4.239778 | Северный административный округ |
| Северо-Восточный административный округ | 4.148260 | Северо-Восточный административный округ |
| Северо-Западный административный округ | 4.208802 | Северо-Западный административный округ |
| Центральный административный округ | 4.377520 | Центральный административный округ |
| Юго-Восточный административный округ | 4.101120 | Юго-Восточный административный округ |
| Юго-Западный административный округ | 4.172920 | Юго-Западный административный округ |
| Южный административный округ | 4.184417 | Южный административный округ |
#загружаем файлы geojson
try:
geomap=geopandas.read_file('\\dataset\\admin_level_geomap.geojson')
except:
geomap=geopandas.read_file('/datasets/admin_level_geomap.geojson')
#визуализируем средний рейтинг заведений по округам
map_center = {'lat': data['lat'].mean(), 'lon': data['lng'].mean()}
fig = px.choropleth_mapbox(
data_rating_dis, geojson=geomap, color='rating',
locations=data_rating_dis.index, featureidkey='properties.name',
center=map_center, zoom=8.5,
mapbox_style='open-street-map', opacity=0.7,
color_continuous_scale=ccscale)
fig.update_geos(fitbounds='locations', visible=False)
fig.update_layout(margin={'r':0,'t':0,'l':0,'b':0})
fig.show()
moscow_lat, moscow_lng = 55.751244, 37.618423
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
marker_cluster = MarkerCluster().add_to(m)
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
data.apply(create_clusters, axis=1)
m
data_dis=data.pivot_table(index='district', values='name', aggfunc='count')
data_dis['district']=data['district'].sort_values().unique()
data_dis
| name | district | |
|---|---|---|
| district | ||
| Восточный административный округ | 798 | Восточный административный округ |
| Западный административный округ | 851 | Западный административный округ |
| Северный административный округ | 900 | Северный административный округ |
| Северо-Восточный административный округ | 891 | Северо-Восточный административный округ |
| Северо-Западный административный округ | 409 | Северо-Западный административный округ |
| Центральный административный округ | 2242 | Центральный административный округ |
| Юго-Восточный административный округ | 714 | Юго-Восточный административный округ |
| Юго-Западный административный округ | 709 | Юго-Западный административный округ |
| Южный административный округ | 892 | Южный административный округ |
#визуализируем плотность размещения заведений по округам
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=data_dis,
columns=['district','name'],
key_on='properties.name',
fill_color='Blues',
fill_opacity=0.7).add_to(m)
m
#рассчитаем количество заведений в разрезе улиц
data_street=data.pivot_table(index='street', columns='category', values='name', aggfunc='count')
data_street.columns=['бар,паб','булочная','быстрое питание','кафе','кофейня','пиццерия','ресторан','столовая']
data_street['total']=data_street.sum(axis=1)
data_street=data_street.sort_values(by='total', ascending=False)
data_street_lid=data_street.drop('total', axis=1)[0:15]
data_street
| бар,паб | булочная | быстрое питание | кафе | кофейня | пиццерия | ресторан | столовая | total | |
|---|---|---|---|---|---|---|---|---|---|
| street | |||||||||
| проспект Мира | 12.0 | 4.0 | 21.0 | 53.0 | 36.0 | 11.0 | 45.0 | 2.0 | 184.0 |
| Профсоюзная улица | 6.0 | 4.0 | 15.0 | 35.0 | 18.0 | 15.0 | 26.0 | 3.0 | 122.0 |
| Ленинский проспект | 10.0 | 3.0 | 2.0 | 26.0 | 24.0 | 5.0 | 33.0 | 5.0 | 108.0 |
| проспект Вернадского | 7.0 | 1.0 | 12.0 | 25.0 | 16.0 | 12.0 | 33.0 | 2.0 | 108.0 |
| Ленинградский проспект | 15.0 | 4.0 | 2.0 | 12.0 | 25.0 | 9.0 | 25.0 | 3.0 | 95.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| Девяткин переулок | 1.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 |
| Даев переулок | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 1.0 |
| Электрический переулок | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 1.0 |
| Гурьевский проезд | NaN | NaN | 1.0 | NaN | NaN | NaN | NaN | NaN | 1.0 |
| 1-й Автозаводский проезд | NaN | NaN | NaN | 1.0 | NaN | NaN | NaN | NaN | 1.0 |
1483 rows × 9 columns
#рассчитаем средние тенденции
print('Среднее количество заведений на одной улице', data_street['total'].mean())
print('Медиана количества заведений на одной улице', data_street['total'].median())
Среднее количество заведений на одной улице 5.668240053944706 Медиана количества заведений на одной улице 3.0
#пересчитаем доли категорий
data_street_lid_perc=data_street.div(data_street['total'], axis=0)
data_street_lid_perc=data_street_lid_perc[0:15].drop('total', axis=1)
data_street_lid_perc=data_street_lid_perc.sort_values('проспект Мира', axis=1, ascending=False)
data_street_lid_perc
| кафе | ресторан | кофейня | быстрое питание | бар,паб | пиццерия | булочная | столовая | |
|---|---|---|---|---|---|---|---|---|
| street | ||||||||
| проспект Мира | 0.288043 | 0.244565 | 0.195652 | 0.114130 | 0.065217 | 0.059783 | 0.021739 | 0.010870 |
| Профсоюзная улица | 0.286885 | 0.213115 | 0.147541 | 0.122951 | 0.049180 | 0.122951 | 0.032787 | 0.024590 |
| Ленинский проспект | 0.240741 | 0.305556 | 0.222222 | 0.018519 | 0.092593 | 0.046296 | 0.027778 | 0.046296 |
| проспект Вернадского | 0.231481 | 0.305556 | 0.148148 | 0.111111 | 0.064815 | 0.111111 | 0.009259 | 0.018519 |
| Ленинградский проспект | 0.126316 | 0.263158 | 0.263158 | 0.021053 | 0.157895 | 0.094737 | 0.042105 | 0.031579 |
| Дмитровское шоссе | 0.261364 | 0.272727 | 0.125000 | 0.113636 | 0.068182 | 0.090909 | 0.022727 | 0.045455 |
| Каширское шоссе | 0.259740 | 0.246753 | 0.207792 | 0.129870 | 0.025974 | 0.064935 | NaN | 0.064935 |
| Варшавское шоссе | 0.236842 | 0.263158 | 0.184211 | 0.092105 | 0.078947 | 0.052632 | NaN | 0.092105 |
| Ленинградское шоссе | 0.185714 | 0.371429 | 0.185714 | 0.071429 | 0.071429 | 0.042857 | 0.028571 | 0.042857 |
| Люблинская улица | 0.433333 | 0.166667 | 0.183333 | 0.083333 | 0.083333 | 0.016667 | NaN | 0.033333 |
| улица Вавилова | 0.272727 | 0.218182 | 0.181818 | 0.200000 | 0.036364 | 0.054545 | 0.036364 | NaN |
| Кутузовский проспект | 0.259259 | 0.296296 | 0.240741 | 0.037037 | 0.037037 | 0.055556 | 0.018519 | 0.055556 |
| улица Миклухо-Маклая | 0.428571 | 0.306122 | 0.081633 | 0.081633 | 0.061224 | 0.040816 | NaN | NaN |
| Пятницкая улица | 0.145833 | 0.375000 | 0.125000 | 0.041667 | 0.187500 | 0.062500 | 0.062500 | NaN |
| Алтуфьевское шоссе | 0.276596 | 0.212766 | 0.191489 | 0.106383 | 0.106383 | 0.063830 | 0.021277 | 0.021277 |
#визуализируем количество заведений разных категорий на наиболее загруженных улицах
plt.figure(figsize=(10,10))
sns.set_style('white')
sns.heatmap(data_street_lid_perc, annot=True, cmap=my_sns_pal_c, fmt=".1%")
plt.title('Соотношение заведений различных категорий', fontsize=16)
plt.ylabel('Улицы', fontsize=12)
plt.xlabel('Категория заведения', fontsize=12)
plt.show();
#выделим улицы, на которых расположено одно заведение общественного питания
single_street=data_street.query('total==1').index
single_street
Index(['2-й Вышеславцев переулок', 'улица Губкина',
'2-й Новоподмосковный переулок', '2-й Зачатьевский переулок',
'Бесединское шоссе', 'улица Усиевича', '2-й Кожуховский проезд',
'Басманный тупик', '2-й Полевой переулок', 'улица Стасовой',
...
'Дербеневская улица', 'Дендропарковая улица', 'Грузинский сквер',
'Делегатская улица', 'Шоссейный проезд', 'Девяткин переулок',
'Даев переулок', 'Электрический переулок', 'Гурьевский проезд',
'1-й Автозаводский проезд'],
dtype='object', name='street', length=477)
#сравним характеристики заведений с общей выборкой
data_single=data.query('street in @single_street')
print('Количество заведений', len(data_single))
print('Доля заведений', len(data_single)/len(data))
print('Общий средний рейтинг', data['rating'].mean())
print('Средний рейтинг выборки', data_single['rating'].mean())
print('Общая доля сетевых', (data.query('chain==1')['chain'].count()/data['chain'].count()))
print('Доля сетевых выборки', (data_single.query('chain==1')['chain'].count()/data_single['chain'].count()))
Количество заведений 477 Доля заведений 0.056745182012847964 Общий средний рейтинг 4.229895312871758 Средний рейтинг выборки 4.237526205450734 Общая доля сетевых 0.4017368546276469 Доля сетевых выборки 0.32075471698113206
#визуализируем расположение таких заведений на карте
map_center = {'lat': data['lat'].mean(), 'lon': data['lng'].mean()}
fig = px.scatter_mapbox(data_single, lat='lat', lon='lng', mapbox_style='open-street-map', center=map_center, zoom=8.5, text='name',
color='category', color_discrete_sequence=pal_colors)
fig.update_layout(title_text='Расположение улиц с единственным заведением общественного питания',
legend_title_text='Категория заведения')
fig.update_traces(showlegend=True, marker_size=10)
fig.show()
#выведем характеристики распределения всей выборки
data['middle_avg_bill'].describe()
count 3149.000000 mean 958.053668 std 1009.732845 min 0.000000 25% 375.000000 50% 750.000000 75% 1250.000000 max 35000.000000 Name: middle_avg_bill, dtype: float64
#выведем характеристики распределения по категориям
bill_cat=data.pivot_table(index='category', values='middle_avg_bill', aggfunc='describe')
bill_cat=bill_cat.sort_values('50%',ascending=False)
bill_cat
| 25% | 50% | 75% | count | max | mean | min | std | |
|---|---|---|---|---|---|---|---|---|
| category | ||||||||
| бар,паб | 925.00 | 1250.0 | 1750.0 | 349.0 | 11000.0 | 1338.762178 | 150.0 | 885.669721 |
| ресторан | 668.75 | 1250.0 | 1750.0 | 1040.0 | 35000.0 | 1367.881731 | 120.0 | 1415.022183 |
| пиццерия | 424.00 | 600.0 | 1000.0 | 395.0 | 3000.0 | 789.377215 | 150.0 | 518.310744 |
| кафе | 350.00 | 550.0 | 1000.0 | 694.0 | 4500.0 | 707.753602 | 67.0 | 505.126951 |
| булочная | 285.00 | 450.0 | 750.0 | 53.0 | 2500.0 | 658.773585 | 50.0 | 599.468439 |
| кофейня | 300.00 | 400.0 | 750.0 | 200.0 | 2500.0 | 614.210000 | 0.0 | 501.083154 |
| быстрое питание | 275.00 | 375.0 | 500.0 | 237.0 | 5500.0 | 445.763713 | 30.0 | 456.092666 |
| столовая | 250.00 | 300.0 | 330.0 | 181.0 | 3750.0 | 335.348066 | 125.0 | 289.213253 |
#визуализируем распределения по категориям
plt.figure(figsize=(10,7))
ranks = data.groupby('category')['middle_avg_bill'].median().fillna(0).sort_values()[::-1].index
sns.boxplot(x='category', y='middle_avg_bill', data=data, order = ranks)
plt.ylim(bottom=0, top=3300)
plt.title('Распределение среднего счета по категориям заведений')
plt.xlabel('Категория заведений')
plt.ylabel('Средний счет')
plt.show();
#определим самое дорогое заведение
max_bill=data['middle_avg_bill'].max()
print('Самый большой средний счет в', data.loc[(data['middle_avg_bill']==max_bill),'category'].values[0], data.loc[(data['middle_avg_bill']==max_bill),'name'].values[0], data.query('middle_avg_bill==@max_bill')['district'].values[0])
Самый большой средний счет в ресторан кафе Южный административный округ
Самый большой средний счет получен в ресторане, который называется "Кафе", находящемся в Южном округе Москвы.
#рассчитаем средний счет по округам
bill_dis=data.pivot_table(index='district', values='middle_avg_bill', aggfunc='median')
bill_dis.columns=['Средний счет']
bill_dis['district']=data['district'].sort_values().unique()
bill_dis
| Средний счет | district | |
|---|---|---|
| district | ||
| Восточный административный округ | 575.0 | Восточный административный округ |
| Западный административный округ | 1000.0 | Западный административный округ |
| Северный административный округ | 650.0 | Северный административный округ |
| Северо-Восточный административный округ | 500.0 | Северо-Восточный административный округ |
| Северо-Западный административный округ | 700.0 | Северо-Западный административный округ |
| Центральный административный округ | 1000.0 | Центральный административный округ |
| Юго-Восточный административный округ | 450.0 | Юго-Восточный административный округ |
| Юго-Западный административный округ | 600.0 | Юго-Западный административный округ |
| Южный административный округ | 500.0 | Южный административный округ |
#визуализируем плотность размещения заведений по округам
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=bill_dis,
columns=['district','Средний счет'],
key_on='properties.name',
fill_color='Blues',
fill_opacity=0.7).add_to(m)
m
#отметим маркерами все заведения
fig = px.scatter_mapbox(data.dropna(subset=['middle_avg_bill']), lat='lat', lon='lng', mapbox_style='open-street-map', center=map_center, zoom=8.5, text='name',
color='middle_avg_bill', color_continuous_scale='Reds', range_color=[250, 2000])
fig.update_layout(title_text='Средний счет заведений общественного питания',
legend_title_text='Средний счет')
fig.update_traces(showlegend=True, marker_size=7)
fig.show()
#визуализируем расположение заведений с наибольшим средним счетом
fig = px.scatter_mapbox(data.dropna(subset=['middle_avg_bill']).query('middle_avg_bill>2000'), lat='lat', lon='lng', mapbox_style='open-street-map', center=map_center, zoom=8.5, text='name',
color='middle_avg_bill', color_continuous_scale='Reds', range_color=[0, 10000])
fig.update_layout(title_text='Расположение заведений общественного питания с наибольшим средним счетом',
legend_title_text='Средний счет')
fig.update_traces(showlegend=True, marker_size=10)
fig.show()
#Отметим на карте расположение заведений
fig = px.scatter_mapbox(data, lat='lat', lon='lng', mapbox_style='open-street-map', center=map_center, zoom=8.5, text='name',
color='is_24/7')
fig.update_layout(title_text='Расположение заведений общественного питания с режимом работы 24/7',
legend_title_text='Круглосуточный режим работы')
fig.update_traces(showlegend=True, marker_size=10)
fig.show()
#расположение похоже на равномерное рассеяние, подтвердим наблюдения расчетами
bill_dis=data.pivot_table(index='district', values='is_24/7', aggfunc=('sum','count'))
bill_dis['24/7']=(100*bill_dis['sum']/bill_dis['count']).round(2)
bill_dis.sort_values('count')
| count | sum | 24/7 | |
|---|---|---|---|
| district | |||
| Северо-Западный административный округ | 409 | 43 | 10.51 |
| Юго-Западный административный округ | 709 | 73 | 10.30 |
| Юго-Восточный административный округ | 714 | 93 | 13.03 |
| Восточный административный округ | 798 | 97 | 12.16 |
| Западный административный округ | 851 | 72 | 8.46 |
| Северо-Восточный административный округ | 891 | 75 | 8.42 |
| Южный административный округ | 892 | 75 | 8.41 |
| Северный административный округ | 900 | 71 | 7.89 |
| Центральный административный округ | 2242 | 131 | 5.84 |
#рассчитаем средний счет в заведениях с разным режимом работы
bill_24_7=data.pivot_table(index='is_24/7', values='middle_avg_bill', aggfunc=('mean','median'))
bill_24_7
| mean | median | |
|---|---|---|
| is_24/7 | ||
| False | 966.633254 | 750.0 |
| True | 847.088496 | 425.0 |
# у круглосуточных средний счет меньше, уточним расчет по категориям заведений
bill_24_7=data.pivot_table(index='category', columns='is_24/7', values='middle_avg_bill', aggfunc=('mean','median'))
bill_24_7.columns=['Средний счет некруглосуточные', 'Средний счет 24/7', 'Медианный счет некруглосуточные','Медианный счет 24/7']
bill_24_7['Средний счет разница']=(100*bill_24_7['Средний счет 24/7']/bill_24_7['Средний счет некруглосуточные']).round(2)
bill_24_7['Медианный счет разница']=(100*bill_24_7['Медианный счет 24/7']/bill_24_7['Медианный счет некруглосуточные']).round(2)
bill_24_7
| Средний счет некруглосуточные | Средний счет 24/7 | Медианный счет некруглосуточные | Медианный счет 24/7 | Средний счет разница | Медианный счет разница | |
|---|---|---|---|---|---|---|
| category | ||||||
| бар,паб | 1347.690909 | 1183.684211 | 1250.0 | 1250.0 | 87.83 | 100.00 |
| булочная | 728.255814 | 360.000000 | 500.0 | 250.0 | 49.43 | 50.00 |
| быстрое питание | 486.836842 | 279.723404 | 400.0 | 300.0 | 57.46 | 75.00 |
| кафе | 722.354992 | 561.507937 | 600.0 | 425.0 | 77.73 | 70.83 |
| кофейня | 557.978610 | 1423.076923 | 400.0 | 1750.0 | 255.04 | 437.50 |
| пиццерия | 802.635884 | 475.312500 | 600.0 | 350.0 | 59.22 | 58.33 |
| ресторан | 1352.050710 | 1656.944444 | 1250.0 | 900.0 | 122.55 | 72.00 |
| столовая | 335.864407 | 312.500000 | 300.0 | 312.5 | 93.04 | 104.17 |
Исключение составляют бары и пабы, у которых размер счета не меняется, а также столовые, в которых средний счет минимален.
Кардинально отличается ситуация для кофеен - средний счет круглосуточных кофеен выше в 4 раза, по сравнению с работающими в другом режиме.
#выведем диаграмму рассеяния
sns.scatterplot(x='middle_avg_bill', y='rating', data=data)
plt.xlim(0, 3300)
plt.title('Взаимосвязь среднего счета и рейтинга заведения')
plt.xlabel('Средний счет')
plt.ylabel('Рейтинг')
plt.show();
#рассчитаем корреляцию
data_corr=data[['rating', 'middle_avg_bill']]
data_corr.corr()
| rating | middle_avg_bill | |
|---|---|---|
| rating | 1.000000 | 0.183238 |
| middle_avg_bill | 0.183238 | 1.000000 |
Количество мест в заведениях общественного питания в среднем не превышает 100 мест: от 86 мест в ресторанах до булочных, в которых в среднем 50 мест.
Доля сетевых заведений общественного питания в Москве составляе 43.8%, чаще к ним относятся кофейни, пиццерии и булочные. Несетевых заведений чуть больше половины - 56.2%, этот показатель выше для баров, пабов, кафе и ресторанов.
Наибольшее количество заведений общественного питания расположено в Центральном административном округе, в этом же округе наибольшая доля ресторанов и кофеен. В остальных округах количество заведений общественного питания составляет от 700 до 900 заведений, и более распространены кафе. Меньше 500 заведений общественного питания в Северо-Западном округе.
В среднем на одной улице в Москве располагаются более 5 заведений общественного питания, медиана количества заведений равна 3. Самая насышенная заведениями улица - проспект Мира, где расположены 184 заведения. Более 100 заведений общественного питания расположены на Профсоюзной улице, проспекте Вернадского, Ленинском и Ленинградском проспектах.
Наиболее высокий рейтинг в среднем у заведений общественного питания в Центральном районе - 4.37. Самые низние оценки у заведений общественного питания Юго-Восточного административного округа - 4.1.
Пользователи чаще всего дают заведениям общественного питания хорошие оценки - медиана рейтинга составляет 4.3, для всех категорий медиана укладывается в диапазон 4.3+/-0.1. Средняя оценка рейтинга заведений, как правило, ниже медианного значения, что свидетельствует о том, что плохие оценки довольно редки и статистически относятся к выбросам. Наиболее высокий рейтинг в среднем у баров и пабов - 4.38. Наиболее критичны пользователи к заведениям быстрого питания, которые оцениваются в среднем в 4.05, и кафе - со средним рейтингом 4.12. Связи рейтинга со средним счетом не обнаружено.
Значение медианы среднего счета в заведениях общественого питания в Москве составляет 750, среднее значение выше - 958, что говорит о наличии аномально больших значений в отдельных заведениях.Самый высокий средний счет в медианных значениях у ресторанов и баров - 1250. В других категориях заведений медиана среднего счета не превышает 600. Дешевле всего обходится питание в столовых, где средний чек составляет 300.
Наиболее высокий средний счет в заведениях общественного питания в Центральном и Западном администратичных округах столицы, самый низкий средний чек - в Юго-Восточном округе.
Заведения общественного питания с круглосуточным режимом работы расположены во всех округах относительно равномерно, здесь не наблюдается сильной концентрации в центре, как по всей выборке, наоборот, в Центральном округе наименьшая доля круглосуточных заведений, а в округах с наименьшим общим числом заведений питания доля круглосуточных заведений максимальна. Круглосуточный режим работы целесообразен только для баров, пабов и столовых, для которых средний счет не ниже заведений с другим режимом работы, и выгоден для кофеен - средний счет круглосуточных кофеен выше в 4 раза, по сравнению с работающими в другом режиме. У заведений прочих категорий при круглосуточном режиме работы средний чек ниже.
#выберем данные
coffee = data.query('category=="кофейня"')
coffee.describe()
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|
| count | 1413.000000 | 1413.000000 | 1413.000000 | 200.000000 | 521.000000 | 1413.000000 | 751.000000 |
| mean | 55.756130 | 37.599649 | 4.277282 | 614.210000 | 175.055662 | 0.530786 | 111.199734 |
| std | 0.064374 | 0.089454 | 0.372250 | 501.083154 | 89.753009 | 0.499228 | 127.837772 |
| min | 55.581907 | 37.371261 | 1.400000 | 0.000000 | 60.000000 | 0.000000 | 0.000000 |
| 25% | 55.719992 | 37.537096 | 4.100000 | 300.000000 | 124.000000 | 0.000000 | 40.000000 |
| 50% | 55.759599 | 37.599096 | 4.300000 | 400.000000 | 170.000000 | 1.000000 | 80.000000 |
| 75% | 55.796430 | 37.655903 | 4.400000 | 750.000000 | 225.000000 | 1.000000 | 144.000000 |
| max | 55.920257 | 37.864105 | 5.000000 | 2500.000000 | 1568.000000 | 1.000000 | 1288.000000 |
# Консолидируем информацию о кофейнях по округам
coffee_dis=coffee.pivot_table(index='district', values=['name','rating', 'middle_coffee_cup', 'middle_avg_bill', 'seats'],
aggfunc=({'name':'count','rating':'mean','middle_coffee_cup':'median', 'middle_avg_bill':'median', 'seats':'median'}))
coffee_dis.columns=['Средний счет','Средняя цена чашки кофе','Количество кофеен','Средний рейтинг', 'Количество мест']
coffee_dis['district']=data['district'].sort_values().unique()
for district in coffee_dis['Количество кофеен']:
coffee_dis.loc[(coffee_dis['Количество кофеен']==district),'Доля кофеен']=(
100*district/data_district.loc[(data_district['кофейня']==district),'total']).round(2)
coffee_dis
| Средний счет | Средняя цена чашки кофе | Количество кофеен | Средний рейтинг | Количество мест | district | Доля кофеен | |
|---|---|---|---|---|---|---|---|
| district | |||||||
| Восточный административный округ | 400.0 | 135.0 | 105 | 4.282857 | 55.0 | Восточный административный округ | 13.16 |
| Западный административный округ | 600.0 | 189.0 | 150 | 4.195333 | 96.0 | Западный административный округ | 17.63 |
| Северный административный округ | 325.0 | 159.0 | 193 | 4.291710 | 66.0 | Северный административный округ | 21.44 |
| Северо-Восточный административный округ | 325.0 | 162.5 | 159 | 4.216981 | 75.0 | Северо-Восточный административный округ | 17.85 |
| Северо-Западный административный округ | 325.0 | 165.0 | 62 | 4.325806 | 87.5 | Северо-Западный административный округ | 15.16 |
| Центральный административный округ | 500.0 | 190.0 | 428 | 4.336449 | 86.0 | Центральный административный округ | 19.09 |
| Юго-Восточный административный округ | 250.0 | 147.5 | 89 | 4.225843 | 50.0 | Юго-Восточный административный округ | 12.46 |
| Юго-Западный административный округ | 375.0 | 198.0 | 96 | 4.283333 | 64.5 | Юго-Западный административный округ | 13.54 |
| Южный административный округ | 387.5 | 150.0 | 131 | 4.232824 | 80.0 | Южный административный округ | 14.69 |
#визуализируем данные по количеству кофеен
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=coffee_dis,
columns=['district','Количество кофеен'],
key_on='properties.name',
fill_color='Blues',
fill_opacity=0.7).add_to(m)
m
#визуализируем данные по рейтингу кофеен
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=coffee_dis,
columns=['district','Средний рейтинг'],
key_on='properties.name',
fill_color='Greens',
fill_opacity=0.7).add_to(m)
m
#визуализируем данные по цене чашки кофе
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=coffee_dis,
columns=['district','Средняя цена чашки кофе'],
key_on='properties.name',
fill_color='Reds',
fill_opacity=0.7).add_to(m)
m
#визуализируем данные по среднему счету
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
Choropleth = folium.Choropleth(geo_data=geomap,
data=coffee_dis,
columns=['district','Средний счет'],
key_on='properties.name',
fill_color='Oranges',
fill_opacity=0.7).add_to(m)
m
#визуализируем расположение кофеен
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
marker_cluster = MarkerCluster().add_to(m)
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
coffee.apply(create_clusters, axis=1)
m
coffee_chain=coffee.pivot_table(index='chain', values=['name','rating', 'middle_coffee_cup', 'middle_avg_bill', 'seats'],
aggfunc=({'name':'count','rating':'mean','middle_coffee_cup':'median', 'middle_avg_bill':'median', 'seats':'median'}))
coffee_chain.columns=['Средний счет','Средняя цена чашки кофе','Количество кофеен','Средний рейтинг', 'Количество мест']
coffee_chain
| Средний счет | Средняя цена чашки кофе | Количество кофеен | Средний рейтинг | Количество мест | |
|---|---|---|---|---|---|
| chain | |||||
| 0 | 365.0 | 170.0 | 663 | 4.357768 | 60.0 |
| 1 | 650.0 | 152.0 | 750 | 4.206133 | 90.0 |
#визуализируем разницу в цене чашки кофе
coffee['chain']=coffee['chain'].replace(0,'несетевые')
coffee['chain']=coffee['chain'].replace(1,'сетевые')
fig = sns.boxplot(x='chain', y='middle_coffee_cup', data=coffee, palette=['#F9E18B', '#6F5ABA'])
plt.ylim(bottom=0, top=350)
plt.title('Средняя цена чашки кофе в кофейнях')
plt.xlabel('Кофейни')
plt.ylabel('Средняя цена чашки кофе')
plt.show();
print(f'Доля круглосуточно открытых кофеен', round((100*len(coffee.loc[coffee['is_24/7']==True])/len(coffee)), 2))
Доля круглосуточно открытых кофеен 4.18
#выберем данные по круглосуточным кофейням
coffee_24_7 = coffee.loc[coffee['is_24/7']==True]
coffee_24_7.describe()
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | seats | |
|---|---|---|---|---|---|---|
| count | 59.000000 | 59.000000 | 59.000000 | 13.000000 | 15.000000 | 37.000000 |
| mean | 55.748806 | 37.600844 | 4.206780 | 1423.076923 | 225.733333 | 91.648649 |
| std | 0.051938 | 0.095871 | 0.386792 | 805.867903 | 61.964813 | 76.506433 |
| min | 55.602350 | 37.371261 | 2.300000 | 0.000000 | 90.000000 | 0.000000 |
| 25% | 55.730611 | 37.544612 | 4.100000 | 750.000000 | 199.500000 | 25.000000 |
| 50% | 55.752136 | 37.590706 | 4.200000 | 1750.000000 | 256.000000 | 78.000000 |
| 75% | 55.776908 | 37.653853 | 4.350000 | 2000.000000 | 256.000000 | 144.000000 |
| max | 55.878477 | 37.827414 | 5.000000 | 2500.000000 | 291.000000 | 320.000000 |
#выберем данные по НЕкруглосуточным кофейням
coffee_not_24_7 = coffee.loc[coffee['is_24/7']==False]
coffee_not_24_7.describe()
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | seats | |
|---|---|---|---|---|---|---|
| count | 1354.000000 | 1354.000000 | 1354.000000 | 187.00000 | 506.000000 | 714.000000 |
| mean | 55.756449 | 37.599597 | 4.280355 | 557.97861 | 173.553360 | 112.212885 |
| std | 0.064859 | 0.089202 | 0.371447 | 421.69628 | 90.054912 | 129.900597 |
| min | 55.581907 | 37.379940 | 1.400000 | 50.00000 | 60.000000 | 0.000000 |
| 25% | 55.719013 | 37.536890 | 4.100000 | 300.00000 | 121.000000 | 40.000000 |
| 50% | 55.759870 | 37.599118 | 4.300000 | 400.00000 | 165.000000 | 80.000000 |
| 75% | 55.796748 | 37.656092 | 4.400000 | 725.00000 | 225.000000 | 144.000000 |
| max | 55.920257 | 37.864105 | 5.000000 | 2000.00000 | 1568.000000 | 1288.000000 |
#Применим т-тест для независимых выборок разного размера
stat, p_value = stats.ttest_ind(coffee_24_7['middle_coffee_cup'].dropna(), coffee_not_24_7['middle_coffee_cup'].dropna(), equal_var=False)
print(f't-test: p-value={p_value:.4f}')
t-test: p-value=0.0061
print('Различия в средней цене чашки кофе между кофейнями составляют {0:.1%}'.format(
coffee_24_7['middle_coffee_cup'].mean()/coffee_not_24_7['middle_coffee_cup'].mean() - 1))
Различия в средней цене чашки кофе между кофейнями составляют 30.1%
stat, p_value = stats.ttest_ind(coffee_24_7['rating'].dropna(), coffee_not_24_7['rating'].dropna(), equal_var=False)
print(f't-test: p-value={p_value:.4f}')
t-test: p-value=0.1569
print('Различия в среднем рейтинге между кофейнями составляют {0:.1%}'.format(
coffee_24_7['rating'].mean()/coffee_not_24_7['rating'].mean() - 1))
Различия в среднем рейтинге между кофейнями составляют -1.7%
stat, p_value = stats.ttest_ind(coffee_24_7['middle_avg_bill'].dropna(), coffee_not_24_7['middle_avg_bill'].dropna(), equal_var=False)
print(f't-test: p-value={p_value:.4f}')
t-test: p-value=0.0022
print('Различия в среднем счете между кофейнями составляют {0:.1%}'.format(
coffee_24_7['middle_avg_bill'].mean()/coffee_not_24_7['middle_avg_bill'].mean() - 1))
Различия в среднем счете между кофейнями составляют 155.0%
#визуализируем разницу в цене чашки кофе
coffee['is_24/7']=coffee['is_24/7'].replace(True,'круглосуточно')
coffee['is_24/7']=coffee['is_24/7'].replace(False,'другой режим работы')
ranks = coffee.groupby('is_24/7')['middle_coffee_cup'].median().fillna(0).sort_values()[::-1].index
fig = sns.boxplot(x='is_24/7', y='middle_coffee_cup', data=coffee, palette=['#F9E18B', '#6F5ABA'], order = ranks)
plt.title('Средняя цена чашки кофе в кофейнях')
plt.xlabel('Кофейни')
plt.ylabel('Средняя цена чашки кофе')
plt.show();
#укрупним диаграмму
ranks = coffee.groupby('is_24/7')['middle_coffee_cup'].median().fillna(0).sort_values()[::-1].index
fig = sns.boxplot(x='is_24/7', y='middle_coffee_cup', data=coffee, palette=['#F9E18B', '#6F5ABA'], order = ranks)
plt.ylim(bottom=0, top=400)
plt.title('Средняя цена чашки кофе в кофейнях')
plt.xlabel('Режим работы')
plt.ylabel('Средняя цена чашки кофе')
plt.show();
#подготовим таблицу с данными
coffee_dis_24_7=coffee_24_7.pivot_table(index='district', values=['name','rating', 'middle_coffee_cup', 'middle_avg_bill', 'seats'],
aggfunc=({'name':'count','rating':'mean','middle_coffee_cup':'median', 'middle_avg_bill':'median', 'seats':'median'}))
coffee_dis_24_7.columns=['Средний счет','Средняя цена чашки кофе','Количество кофеен','Средний рейтинг', 'Количество мест']
coffee_dis_24_7
| Средний счет | Средняя цена чашки кофе | Количество кофеен | Средний рейтинг | Количество мест | |
|---|---|---|---|---|---|
| district | |||||
| Восточный административный округ | 400.0 | 110.0 | 5 | 4.300000 | 49.0 |
| Западный административный округ | 1675.0 | 275.0 | 9 | 4.200000 | 48.0 |
| Северный административный округ | NaN | 285.0 | 5 | 4.220000 | 20.0 |
| Северо-Восточный административный округ | NaN | 170.0 | 3 | 3.866667 | 12.5 |
| Северо-Западный административный округ | 750.0 | NaN | 2 | 4.250000 | 200.0 |
| Центральный административный округ | 2000.0 | 256.0 | 26 | 4.288462 | 146.0 |
| Юго-Восточный административный округ | NaN | NaN | 1 | 2.300000 | NaN |
| Юго-Западный административный округ | NaN | 256.0 | 7 | 4.271429 | 48.0 |
| Южный административный округ | NaN | NaN | 1 | 4.000000 | 0.0 |
m = Map(location=[moscow_lat, moscow_lng], zoom_start=10)
marker_cluster = MarkerCluster().add_to(m)
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
coffee_24_7.apply(create_clusters, axis=1)
m
Различия в средней цене между сетевыми и несетевыми кофейнями: средний счет выше в сетевых, а цена за чашку кофе - в несетевых кофейнях, по количествй мест и кофеен лидируют сети, а рейтинг немного выше у несетевых кофеен.
Больше всего кофеен в Центральном административном округе, в том числе раблотающих в режиме 24/7. Во всех остальных округах доля кофеен среди заведений общественного питания ниже среднего, круглосуточных из них менее 10 в кажом округе. Меньше всего кофеен в Северо-Западном округе. Выше среднего рейтинг кофеен в Центральном и Северо-Западном административных округах. Самый низкий рейтинг кофеен Западного и Северо-Восточного округов. Самый дорогой кофе в Юго-западном, Центральном и Западном округах. Дешевле всего чашка кофе стоит в Восточном округе.
Доля круглосуточно работающих кофеен в Москве невелика - в режиме 24/7 работаю 4.18% или 59 кофеен. Средняя цена чашки кофе и средний счет в круглосуточных кофейнях статистически значимо отличается от цены кофе в кофейнях с другим режимом работы. Чашка кофе в среднем обойдется в 200, на 30.1% дороже чем в некруглосуточных кофейнях, средний счет в круглосуточных кофейнях выше в 2.5 раза. Рейтинг круглосуточных кофеен статистически не отличается от рейтинга кофеен с другим режимом работы.
Более половины заведений общественного питания Москва приходится на долю кафе и ресторанов. Кофеен в Москве 1413, что составляети 16.8% заведений общественного питания. Пабов и баров, пиццерии, заведения быстрого питания, булочные и столовые суммарно охватывают треть рынка.
В среднем в заведениях общественного питания Москвы 75 мест, больше мест обычно в ресторанах, барах, пабах и кофейнях, меньшим количеством мест отличаются заведениях быстрого притания, кафе, булочные и пиццерии.
Доля сетевых заведений общественного питания в Москве составляет 43.8%, этот показатель выше среди кофеен, пиццерий и булочных. Несетевых заведений больше половины - 56.2%, чаще характерно для баров, пабов, кафе и ресторанов.
Пользователи чаще всего дают заведениям общественного питания хорошие оценки - медиана рейтинга составляет 4.3, для всех категорий медиана укладывается в диапазон 4.3+/-0.1. Плохие оценки довольно редки и статистически относятся к выбросам. Наиболее высокий рейтинг в среднем у баров и пабов. Наиболее критичны пользователи к заведениям быстрого питания и кафе.
Наибольшее количество заведений общественного питания расположено в Центральном административном округе, здесь же наибольшая доля ресторанов и кофеен. В остальных округах количество заведений общественного питания не превышает 1000 (от 700 до 900 заведений в каждом округе), и более распространены кафе. Меньше 500 заведений общественного питания в Северо-Западном округе.
Наиболее высокий рейтинг в среднем у заведений общественного питания в Центральном районе, выше среднего - в Северном округе. Самые низние оценки у заведений общественного питания Юго-Восточного административного округа.
В среднем на одной улице в Москве располагаются более 5 заведений общественного питания, медиана количества заведений равна 3. Самая насышенная заведениями улица - проспект Мира, где расположены 184 заведения. Более 100 заведений общественного питания расположены всего на 5 улицах Москвы.
Значения среднего счета в заведениях общественого питания в Москве разбросаны в диапазоне от 0 до 35000. Медиана среднего чека составляет 750, среднее значение выше - 958, что говорит о наличии аномальны больших значений в отдельных заведениях. Самый высокий средний счет в медианных значениях у ресторанов и баров - 1250. В других категориях заведений медина среднего счета ниже в разы. Дешевле всего обходится питание в столовых, средний чек в которых равен 300.
Во всех округах столицы находятся как догоростоящие, так и бюджетные заведения общественного питания, хотя в центре концентрация заведений с дорогими заказами выше за счет большего количества заведений всех ценовых категорий. Заведения общественного питания с круглосуточным режимом работы расположены во всех округах относительно равномерно.
Для большинства категорий работать круглосуточно невыгодно, средний счет заведений, работающих в режиме 24/7 средний счет ниже работающих в другие часы. Исключение составляют бары и пабы, у которых размер счета не меняется, а также столовые, в которых средний счет минимален. Кардинально отличается ситуация для кофеен - средний счет круглосуточных кофеен выше в 4 раза, по сравнению с работающими в другом режиме.
В Москве по имеющиейся информации открыто 1413 кофеен, более половины из них - сетевые. Количество мест в среднем - 80 мест. Чашка кофе в среднем стоит 170, средний счет в кофейнях - 400, медиана рейтигна 4.3.
Больше всего кофеен в Центральном административном округе, в том числе раблотающих в режиме 24/7. Во всех остальных округах доля кофеен среди заведений общественного питания ниже среднего, круглосуточных из них менее 10 в кажом округе. Меньше всего кофеен в Северо-Западном округе.
Выше среднего рейтинг кофеен в Центральном и Северо-Западном административных округах. Самый низкий рейтинг кофеен Западного и Северо-Восточного округов. Самый дорогой кофе в Юго-западном, Центральном и Западном округах. Дешевле всего чашка кофе стоит в Восточном округе.
Доля круглосуточно работающих кофеен в Москве невелика - в режиме 24/7 работаю 4.18% или 59 кофеен. Средняя цена чашки кофе и средний счет в круглосуточных кофейнях статистически значимо отличается от цены кофе в кофейнях с другим режимом работы. Чашка кофе в среднем обойдется в 200, на 30.1% дороже чем в некруглосуточных кофейнях, средний счет в круглосуточных кофейнях выше в 2.5 раза. Рейтинг круглосуточных кофеен статистически не отличается от рейтинга кофеен с другим режимом работы.
Рекомендации по открытию кофейни в Москве в порядке приоритетности:
1. Юго-Восточный административный округ - округ с самой низкой конкуренцией, одна кофейня в округе с круглосуточным режимом работы, ценовой диапазон ниже медианы по городу, рекомендуемая средняя цена за чашку кофе - 150;
2. Юго-Западный административный округ - округ с низкой конкуренцией, ценовой диапазон выше медианы по городу, рекомендуемая средняя цена за чашку кофе - 200;
3. Северо-Западный административный округ - уровень конкуренции ниже среднего, одна кофейня в округе с круглосуточным режимом работы, ценовой диапазон соответствует медиане по городу, рекомендуемая средняя цена за чашку кофе - 170;
4. Восточный административный округ- низкий уровень конкуренции среди кофеен, ценовой диапазон ниже медианы по городу, рекомендуемая средняя цена за чашку кофе - 140;
5. Южный административный округ - средний уровень конкуренции среди кофеен, одна кофейня в округе с круглосуточным режимом работы, ценовой диапазон ниже медианы по городу, рекомендуемая средняя цена за чашку кофе - 150;
6. Западный административный округ - уровень конкуренции ниже среднего, ценовой диапазон выше медианы по городу, рекомендуемая средняя цена за чашку кофе - 190;
7. Северо-Восточный административный округ - уровень конкуренции ниже среднего, ценовой диапазон немного ниже медианы по городу, рекомендуемая средняя цена за чашку кофе - 160;
8. Центральный административный округ - высокая конкуренция, высокий уровень цен, рекомендуемая средняя цена за чашку кофе - 190;
9. Северный административный округ- самая высокая конкуренция в городе, ценовой диапазон немного ниже медианы по городу, рекомендуемая средняя цена за чашку кофе - 160.
Режим работы при любом выбранном размещении - круглосуточный.
Презентация: